在tablayout片段之间进行通信[重复]

Posted

技术标签:

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

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

活动:

片段1、片段2、片段3

从 Fragment2 更新 Fragment1 的 UI。

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

【问题讨论】:

那么代码在哪里,我们可以检查空异常在哪里? @Piyush 在尝试不同方法时丢失了代码。一般来说,要实现这一点,最佳实践是什么 Check this 请提供您的代码结构,然后我会找到您的问题 【参考方案1】:
    您可以使用Observer Pattern 来实现此目的。为此,您必须在您的MainActivity 中创建一个MutableLiveData 并将其传递给fragmentinterface。 然后从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
    )


【讨论】:

以上是关于在tablayout片段之间进行通信[重复]的主要内容,如果未能解决你的问题,请参考以下文章

当使用tablayout切换片段时,所有片段都会重新创建

在 TabLayout 中的片段之间滑动变慢

getPageTitle() 没有被片段内的 Tablayout 调用

片段无法加载到 View_pager tabLayout [重复]

Android:使用Tab检测单个片段viewpager

在tablayout viewpager中运行调整选项卡片段