如何从活动中传递回调到片段

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从活动中传递回调到片段相关的知识,希望对你有一定的参考价值。

文档中描述了将数据从片段传递到活动的方法(https:/developer.android.comtrainingbasicsfragmentscommunicating.html。).我有相反的情况,我需要从activity中传递数据到fragment。什么是设置回调到片段活动的最佳方法?我使用 (activity as MainActivity).setCallback(this) 在一个片段中,它可以工作。

答案

在这种情况下,你的活动不知道这个片段是否被创建了没有被销毁。你可以使用liveData实现你想要的东西。

在MainActivity中使用liveData.ViewModel来实现你想要的。

class MainActivity: BaseFragmentActivity() {
    val viewModel: CustomViewModel by viewModels()

    fun yourFunction() {
        viewModel.dataToPassToFragment.value = yourData
    }

}

ViewModel:

class CustomViewModel: ViewModel() {
    var dataToPassToFragment = MutableLiveData<String>()
}

片段。

class CustomFragment: BaseFragment() {
    override val viewModel: CustomViewModel by activityViewModels()

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        super.onCreateView(inflater, container, savedInstanceState)
        viewModel.dataToPassToFragment.observe(this, Observer { data ->
            // do what you want with this data
        })
    }
}

这样做,你的活动就不需要知道片段的情况 如果活动改变了数据,片段被销毁了,你也不会有任何崩溃。

以上是关于如何从活动中传递回调到片段的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据从一个活动传递到android中的另一个活动片段? [复制]

如何将值从一个活动中的片段传递到另一个活动? [复制]

如何将捆绑从一个活动传递到放置在另一个活动中的片段?

如何将值从片段/活动传递到 xml?

将活动回调发送到片段

如何使用菜单按钮将数据从活动传递到android中的片段?