簡體   English   中英

片段到片段與沒有主機活動的視圖模型的通信

[英]Fragment to fragment communication with viewmodel without host activity

使用viewmodel和主機activityViewModel by activityViewModels() )可以直接實現fragmentfragment的通信。 但是我有一個情況,沒有中間的通信活動。

我正在開發一個模塊化應用程序,其模塊包括appwallet app依賴於walletwallet模塊有一個fragmentWalletFragment ,可以通過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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM