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

时间:2020-05-21 09:27:41

标签: android kotlin fragment

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

1 个答案:

答案 0 :(得分:1)

在这种情况下,您的活动不知道片段是否已创建/未被销毁。 您可以使用liveData实现所需的功能。

在MainActivity中:

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
        })
    }
}

这样做,您的活动不需要知道该片段,并且如果该活动更改了数据并且该片段被销毁,您将不会崩溃。