簡體   English   中英

java.lang.RuntimeException:當android重新創建Activity和Fragment時,無法創建類ViewModel的實例

[英]java.lang.RuntimeException: Cannot create an instance of class ViewModel, when android recreates Activity and Fragment

案例是Activity-Fragment Recreate:我正在activity級別從活動context創建ViewModel ,並嘗試使用ViewModelProvider .of() 在Fragment級別訪問初始化的ViewModel

下面的代碼在快樂的情況下工作; 但是當重新創建活動(更改系統語言或權限)時,相同的代碼不起作用,並且片段無法訪問活動創建的視圖模型。

ViewModel 是參數化的,只有一個主要構造函數,並使用 ViewModelProvider.Factory 進行初始化

視圖模型結構

class MessageViewModel(var message: MutableLiveData<String>): ViewModel() { ... }

Activity 處的 ViewModel 初始化

val viewModel = ViewModelProviders.of(this, MessageVMFactory())
            .get(MessageViewModel::class.java)

在 Fragment 處訪問 ViewModel

val viewModel = ViewModelProviders.of(activity)
            .get(MessageViewModel::class.java)

錯誤

java.lang.RuntimeException:無法啟動活動 ComponentInfo{com.krp.android.viewmodeldemo/com.krp.android.viewmodeldemo.MainActivity}:java.lang.RuntimeException:無法創建類 com.krp.android.viewmodeldemo 的實例.utility.MessageViewModel

如果您已通過 Factory 初始化 ViewModel,則必須通過 Factory 訪問它,而不管任何上下文。 當系統重新創建活動或片段時,似乎是 ViewModel 問題。

它在 Fragment 上工作正常,當

val viewModel = ViewModelProviders.of(activity, MessageVMFactory())
                .get(MessageViewModel::class.java)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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