在 tablayout 片段之间进行通信

Communicating between the tablayout Fragments

我使用了带有片段的选项卡布局。剧情是这样的。

Activity:

片段 1、片段 2、片段 3

从 Fragment2 更新 Fragment1 的 UI。

我试图访问片段中的方法,但结果是空指针异常

  1. 您可以使用 Observer Pattern 来实现。为此,您必须在 MainActivity 中创建一个 MutableLiveData 并将其通过 interface 传递给 fragment
  2. 然后post从FragmentA取值,从FragmentB观察,变化
  3. 时做操作

创建接口:

interface UpdateFragmentListener {
    fun onUpdate(): MutableLiveData<Any>
}

Activity 中实现:

class MainActivity: AppCompatActivity, UpdateFragmentListener {
   val fragmentUpdate: MutableLiveData<Any> = MutableLiveData()

   ...

   override fun onUpdate(): MutableLiveData<Any> = fragmentUpdate
}

片段A内部:

...

val updateListener: UpdateFragmentListener 

override fun onAttach(context: Context) {
    updateListener = context as UpdateFragmentListener 
}

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

    //use like this by modifying it wherever you need inside FragmentA
    updateListener.onUpdate().postValue(Any())

}

片段 B 内部:

...

val updateListener: UpdateFragmentListener 

override fun onAttach(context: Context) {
    updateListener = context as UpdateFragmentListener 
}

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

    //Observe it and do operation wherever you need inside FragmentB
    updateListener.onUpdate().observe(this, Observer { 
        // implement your logic here
    })

}