Vah*_*yan 8 android viewmodel kotlin savedstateviewmodelfactory
navigation
将组件和版本更新到 2.5.0-alpha01 后,lifecycle viewmodel
我遇到了以下问题。
java.lang.RuntimeException:无法启动活动 ComponentInfo{com.atcc.aewp/com.atcc.aewp.activity.SplashActivity}:java.lang.UnsupportedOperationException:使用空构造函数构造的 SavedStateViewModelFactory 仅支持调用 create(modelClass: Class,额外内容:CreationExtras)。
加载视图模型时抛出异常
open class BaseActivity : AppCompatActivity() {
private val appLanguageViewModel: AppLanguageViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
appLanguageViewModel.result.observe(this) {
...
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的视图模型类
class AppLanguageViewModel : ViewModel() {
private val languageLiveData = MutableLiveData<Event<ApplicationLanguage>>()
val result: LiveData<Event<ApplicationLanguage>> = languageLiveData
fun setLanguage(applicationLanguage: ApplicationLanguage) {
if (LanguagePreferences.instance().setLanguage(applicationLanguage.name)) {
languageLiveData.postValue(Event(applicationLanguage))
}
}
}
Run Code Online (Sandbox Code Playgroud)
Sin*_*zak 10
解决方法;
private val viewModel: AppLanguageViewModel by viewModels {
SavedStateViewModelFactory(application, this)
}
Run Code Online (Sandbox Code Playgroud)
原因;
因为并不是所有东西都使用 ViewModelFactory 的新 API。ComponentActivity 中的默认工厂是 SavedStateViewModelFactory,没有任何构造函数参数。
我们遇到了 HiltViewModelFactory 的问题。它调用 create 方法而不传递新的 CreationExtras 值。我认为在我们的例子中这应该固定在刀柄上。如果您可以分享堆栈跟踪的其余部分,我们也可能会找出您案例的根本原因。
归档时间: |
|
查看次数: |
3943 次 |
最近记录: |