android-fragments 如何通知一个片段在另一个片段上发生了一些事情

u4dcyp6a  于 2022-11-14  发布在  Android
关注(0)|答案(1)|浏览(141)

我在屏幕上有2个片段,我如何通知第2个在第1个发生了一些事情?现在我使用这个解决方案:

companion object {
    private val onFullScreenPressedEvent = SingleLiveEvent<Boolean>()
    val onFullScreenPressed: LiveData<Boolean> = onFullScreenPressedEvent
}

并从第二个片段开始观察onFullScreenPressed

n53p2ov0

n53p2ov01#

最好的办法是使用绑定到片段Activity的ViewModel(在片段之间共享),并在那里修改liveData。
示例视图模型

class MyActivityViewModel : ViewModel(){

    private val onFullScreenPressedEvent = SingleLiveEvent<Boolean>()
    val onFullScreenPressed: LiveData<Boolean> = onFullScreenPressedEvent

fun onFullScreen(){
    onFullScreenPressedEvent.call()
}}

例如,通过使用implementation "androidx.fragment:fragment-ktx:1.4.0",你可以在片段A中做

private val viewModelA: MyActivityViewModel by activityViewModels()

并调用将更改事件viewModelA.onFullScreen()的代码
那么在片段B中

private val viewModelB: MyActivityViewModel by activityViewModels()

并观察片段A中触发的liveData viewModelB.onFullScreenPressed.observe(viewLifecycleOwner, myObserver)

相关问题