kotlin - SavedState 模块 Android Kotlin with View Model - 值似乎没有保存

标签 kotlin viewmodel viewmodel-savedstate

我已按照 Google Codelab 中有关保存状态模块的说明进行操作。

我的gradle依赖是:

implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-rc03"

我的 View 模型工厂是:
class MyViewModelFactory(val repository: AppRepository, owner: SavedStateRegistryOwner,
                              defaultArgs: Bundle? = null) : AbstractSavedStateViewModelFactory(owner, defaultArgs) {

    override fun <T : ViewModel?> create(
            key: String,
            modelClass: Class<T>,
            handle: SavedStateHandle): T {
        return MyViewModel(repository, handle) as T
    }
}

我的 View 模型:
 class MyViewModel constructor(val repository: AppRepository, private val savedStateHandle: SavedStateHandle): ViewModel() {
       fun getMyParameter(): LiveData<Int?> {
            return savedStateHandle.getLiveData(MY_FIELD)
        }

        fun setMyParameter(val: Int) {
            savedStateHandle.set(MY_FIELD, val)
        }
    }

我的片段:
      class MyFragment : androidx.fragment.app.Fragment() {
           override fun onCreate(savedInstanceState: Bundle?) {        
                arguments?.let {
                   var myField = it.getInt(MY_FIELD)
 activitiesViewModel.setMySavedValue(myField ?: 0)
                }

        }
        }

使用应用程序时,已保存状态字段的实时数据会正确更新。但是,一旦我将应用程序置于后台(并且我在开发人员选项中设置了“不保留事件”),然后重新打开应用程序,实时数据就会显示一个值,就好像它从未设置过一样。换句话说,保存的状态句柄似乎忘记了我要保存的字段。

有什么想法吗?

最佳答案

我有同样的问题。通过我停止在 onRestoreInstanceState 方法中从 SavedStateHandle 请求保存的值这一事实解决了这个问题。此调用在 onCreate 方法中正确使用。

关于kotlin - SavedState 模块 Android Kotlin with View Model - 值似乎没有保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59781038/

相关文章:

kotlin - io.mockk.MockKException : no answer found for: SavedStateHandle(#1). set(Key, something)

android - 如何在 Kotlin 中使用 MPAndroidChart 为条形图添加带有一些详细信息的标记?

kotlin - 如何在没有 NoSuchMethodError 的 Kotlin 1.4 的 Gradle 构建中使用新定义的委托(delegate)属性?

android - BR 文件的数据绑定(bind)问题

java - 如何在 ViewModel android 中使用 mBagOfTags?

android - GoogleSignIn requestPermissions onActivityResult 0 与 Google Fitness 步数/距离范围

java - 用于自定义对象的 Android 房间类型转换器

javascript - 将 JSON 转换为 ViewModel 并将 token 传递给 Controller

android-viewmodel - SavedStateHandle 不持久化数据