【问题标题】:Communicating between the tablayout Fragments [duplicate]在tablayout片段之间进行通信[重复]
【发布时间】:2020-02-20 10:31:28
【问题描述】:

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

活动:

片段1、片段2、片段3

从 Fragment2 更新 Fragment1 的 UI。

我试图从片段中访问方法,但导致 空指针异常

【问题讨论】:

  • 那么代码在哪里,我们可以检查空异常在哪里?
  • @Piyush 在尝试不同方法时丢失了代码。一般来说,要实现这一点,最佳实践是什么
  • 请提供您的代码结构,然后我会找到您的问题

标签: android android-fragments nullpointerexception android-tablayout


【解决方案1】:
  1. 您可以使用Observer Pattern 来实现此目的。为此,您必须在您的MainActivity 中创建一个MutableLiveData 并将其传递给fragmentinterface
  2. 然后从FragmentA传值,从FragmentB观察,变化时进行操作

创建接口:

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.onUpdate().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.onUpdate().observe(this, Observer { 
        // implement your logic here
    })

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-12
    • 1970-01-01
    • 2016-01-31
    相关资源
    最近更新 更多