Передача данных между фрагментами данных - PullRequest
1 голос
/ 07 января 2020

Привет, я создал приложение и пытаюсь передать данные между двумя фрагментами в приложении.

nav_graph. xml

<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/nav_graph"
app:startDestination="@id/title2">
<fragment
    android:id="@+id/title2"
    android:name="com.example.order10.title"
    android:label="title" >
    <action
        android:id="@+id/action_title2_to_pageone"
        app:destination="@id/pageone" />
   </fragment>
   <fragment
    android:id="@+id/pageone"
    android:name="com.example.order10.pageone"
    android:label="pageone" >
    <action
        android:id="@+id/action_pageone_to_finalpage"
        app:destination="@id/finalpage" >
        <argument android:defaultValue="Hi"
            android:name="text" />
    </action>
    </fragment>
    <fragment
    android:id="@+id/finalpage"
    android:name="com.example.order10.finalpage"
    android:label="fragment_finalpage"
    tools:layout="@layout/fragment_finalpage" >
    <argument
        android:name="order_text"
        app:argType="string"
        android:defaultValue="Hi" />
  </fragment>
   <fragment
    android:id="@+id/about"
    android:name="com.example.order10.about"
    android:label="Order 1.0" />
 </navigation>

Код для передачи данных

fun navigation(text:String){
    var args= bundleOf()
    args.putString("order_text",text)
    view?.findNavController()?.navigate(R.id.action_pageone_to_finalpage,args)


}      navigation("This is order one ")

Код для получения данных

 val order_text:TextView?=view?.findViewById(R.id.order_text)
    order_text?.text=arguments?.getString("order_text")

Но он не работает, он даже не показывает текст по умолчанию Я применил все плагины и зависимости

Ответы [ 2 ]

1 голос
/ 07 января 2020

Для передачи данных:

val direction = pageoneDirections.actionPageOneToFinalPage("your text")
view?.findNavController()?.navigate(direction)

Для получения данных:

В вашем классе:

val args: finalpageArgs by navArgs()

В вашем onCreateView:

val order_text = args.order_text
0 голосов
/ 07 января 2020

Код для передачи данных change на это:

fun navigation(text:String){

    val args = bundleOf("order_text" to text)
    view?.findNavController()?.navigate(R.id.action_pageone_to_finalpage,args)
}

Код для получения данных change на это:

val receiveData = arguments?.getString("order_text")!!

val order_text:TextView?=view?.findViewById(R.id.order_text)
    order_text?.text=receiveData

Обновление:

Измените finalPage на следующее:

class finalpage : Fragment() {


    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {

        return inflater.inflate(R.layout.fragment_finalpage, container, false)
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        val receiveData = arguments?.getString("order_text")!!
        val order_text:TextView?=view.findViewById(R.id.order_text)
        order_text?.text=receiveData
    }
}

ВЫ МОЖЕТЕ ИСПОЛЬЗОВАТЬ КОМПОНЕНТЫ ПОСЛЕ ТОГО, КАК ВЫ ОПРЕДЕЛЯЕТЕ СВОЙ ВИД

...