android - 在没有主机活动的情况下使用视图模型进行分段通信
问题描述
使用主机( )fragment
进行通信有一个直接的实现。但是,我有一个没有用于通信的中间活动的情况。fragment
viewmodel
activity
ViewModel by activityViewModels()
我正在开发一个模块化应用程序,其中包含app
和wallet
. app
依赖于wallet
并且wallet
模块有一个fragment
:WalletFragment
可以被app
's 的模块访问MainActivity
。
现在,如果我为's module创建一个viewModel
实例,我将无法从module 访问它,因为module 不依赖于该模块。我怎样才能做到这一点?app
MainActivity
wallet
wallet
app
对于主要问题:我有另一个场景,在同一模块中WalletFragment
调用了一个新的。有没有一种方法可以为此创建一个实例,可以通过. 换句话说,有没有这样的东西?BottomSheetFragment
wallet
ViewModel
WalletFragment
BottomSheetFragment
ViewModel by activityViewModels()
ViewModel by fragmentViewModels()
解决方案
我认为您可以使用名为 的东西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
})
}
}
我希望它可以帮助。有关更多详细信息,您可以查看:
推荐阅读
- php - 在PHP中的字符串内循环
- hadoop - 容器运行超出物理内存限制
- javascript - 更新反应表单中的嵌套 json 值
- java - Maven Build 在 Surefire 测试之间挂起
- javascript - 如果传递了 Function 道具,VueJS 2 会显示一些 HTML
- swift - 提高 API 调用速度 osx
- python - python3串行读取v/s python 2
- sql - 如何将 sql 脚本作为参数传递给 bash 文件?
- ios - 滚动 tacbleview 后丢失的按钮选择
- python - 如何从离线 plotly python jupyter notebook 中的选定点获取数据?