首页 > 解决方案 > 在没有主机活动的情况下使用视图模型进行分段通信

问题描述

使用主机( )fragment进行通信有一个直接的实现。但是,我有一个没有用于通信的中间活动的情况。fragmentviewmodelactivityViewModel by activityViewModels()

我正在开发一个模块化应用程序,其中包含appwallet. app依赖于wallet并且wallet模块有一个fragment:WalletFragment可以被app's 的模块访问MainActivity

现在,如果我为's module创建一个viewModel实例,我将无法从module 访问它,因为module 不依赖于该模块。我怎样才能做到这一点?appMainActivitywalletwalletapp

对于主要问题:我有另一个场景,在同一模块中WalletFragment调用了一个新的。有没有一种方法可以为此创建一个实例,可以通过. 换句话说,有没有这样的东西?BottomSheetFragmentwalletViewModelWalletFragmentBottomSheetFragmentViewModel by activityViewModels()ViewModel by fragmentViewModels()

标签: androidandroid-fragmentsandroid-activityviewmodelmodularization

解决方案


我认为您可以使用名为 的东西SharedViewModel,例如:

这是将要共享的 viewModel。

class ShareableViewModel(): ViewModel(){

    val message = MutableLiveData<String>()

    fun sendMessage(text: String) {
        message.value = text
    }
}

现在FirstFragment是将发送一些东西的片段,在这种情况下,只是一个字符串。

class FirstFragment: Fragment(){

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {

        val shareableViewModel = ViewModelProvider(requireActivity()).get(ShareableViewModel::class.java)
        shareableViewModel.sendMessage("Message from first Fragment")
    }
}

最后,SecondFragment是正在接收消息片段的片段Fragment1

class SecondFragment: Fragment(){

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {

    val shareableViewModel = ViewModelProvider(requireActivity()).get(ShareableViewModel::class.java)
        shareableViewModel.message.observe(viewLifecycleOwner, Observer {
        //Receiving the message
        })
    }
}

我希望它可以帮助。有关更多详细信息,您可以查看:


推荐阅读