[英]Fragment to fragment communication with viewmodel without host activity
使用viewmodel
和主機activity
( ViewModel by activityViewModels()
)可以直接實現fragment
到fragment
的通信。 但是我有一個情況,沒有中間的通信活動。
我正在開發一個模塊化應用程序,其模塊包括app
和wallet
。 app
依賴於wallet
, wallet
模塊有一個fragment
: WalletFragment
,可以通過app
的模塊MainActivity
訪問。
現在,如果我為app
的模塊MainActivity
創建一個viewModel
實例,我將無法從wallet
模塊訪問它,因為wallet
模塊不依賴於app
模塊。 我怎樣才能做到這一點?
對於主要問題:我有另一個場景,其中WalletFragment
在同一個wallet
模塊中調用一個新的BottomSheetFragment
。 有沒有一種方法可以為這個WalletFragment
創建一個ViewModel
實例, 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
})
}
}
我希望它能有所幫助。 更多詳情,您可以查看:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.