我找不到 savedInstanceState
Restore UI state after activity or process recreation 中的代码示例中显示的函数State and Jetpack Compose 的部分该部分说“在 Activity 和过程重新创建中保留状态”。
我确实找到了 androidx.compose.runtime.saveable
documentation其中包含 rememberSaveable
这似乎是 savedInstanceState
的重命名或替换并且它的文档还说“......存储的值(value)将在 Activity 或流程再造中幸存下来。”
但是,当我在我的代码中使用它时,状态不会在后退按钮中保留下来,尽管它会在旋转中保留下来。这与文档所说的相反。
package com.example.jetwatch
import android.os.Bundle
import androidx.activity.compose.setContent
import androidx.appcompat.app.AppCompatActivity
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.material.*
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
class MainActivity : AppCompatActivity() {
override fun onCreate(bundle: Bundle?) {
super.onCreate(bundle)
setContent {
MaterialTheme(colors = if (isSystemInDarkTheme()) darkColors() else lightColors()) {
Surface {
Column {
Row {
Column {
var m by rememberSaveable { mutableStateOf(0) }
Text("m = $m")
Button(onClick = { ++m }) {
Text("bump")
}
}
}
}
}
}
}
}
}
最佳答案
the state does not survive the back button
在该示例中,这是预期的行为。后退导航的默认行为是销毁 Activity 。保存的实例状态此时被丢弃。这不是 Compose 独有的,并且自 Android 1.0 以来一直是 Android 的常规行为。
That's contrary to what the documentation says.
文档中使用的“流程终止”是指此流程:
届时,Android 将为您创建一个全新的流程,并尝试将您的 UI 恢复到用户离开您的应用程序之前的状态。保存的实例状态是该恢复的一部分。
关于通过 rememberSaveable State 编写的 Android Jetpack Compose 无法在后退按钮中存活,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66424642/