我使用带有片段的选项卡布局。场景是这样的。
活动:
片段1,片段2,片段3
从Fragment2更新Fragment1的UI。
我试图从片段访问方法,但导致空指针错误。
Observer Pattern
实现此目的。为此,您必须在MutableLiveData
中创建一个MainActivity
,并将其通过fragment
传递给interface
。 创建界面:
interface UpdateFragmentListener {
fun onUpdate(): MutableLiveData<Any>
}
在Activity
中实现:
class MainActivity: AppCompatActivity, UpdateFragmentListener {
val fragmentUpdate: MutableLiveData<Any> = MutableLiveData()
...
override fun onUpdate(): MutableLiveData<Any> = fragmentUpdate
}
在FragmentA内部:
...
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.postValue(Any())
}
在FragmentB内部:
...
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.observe(this, Observer {
// implement your logic here
})
}