假設我有以下代碼:
@Composable
fun Widget() {
var text1 by remember { mutableStateOf("DEFAULT") }
val picker = rememberLauncherForActivityResult(
contract = ActivityResultContracts.GetMultipleContents(),
onResult = {
for (uri in it) print(uri)
},
)
Text(
text = text1,
)
Button(
onClick = { text1 = "CHANGED" },
) {
Text(
text = "Change text1",
)
}
Button(
onClick = { picker.launch("image/*") },
) {
Text(
text = "Launch Picker",
)
}
}
當我的應用程式第一次安裝并啟動時,如果您text1通過按下標有“更改文本 1”的按鈕來更改 ,然后按下按鈕啟動picker,可組合狀態將丟失并text1恢復為"DEFAULT"。
有趣的是,這種情況僅在安裝和啟動應用程式后或重新啟動手機并首次使用應用程式后第一次發生。
我還想指出,這種情況發生在應用程式的除錯版本和發布版本中。
所以,我想知道這可能是什么原因?這是一個已知的撰寫錯誤嗎?還是我如何實體化/使用選擇器?
uj5u.com熱心網友回復:
我認為第一次可能會發生配置更改,remember但無法處理。
嘗試替換remember為rememberSaveable. 從檔案:
雖然記住可以幫助您在重新組合時保留狀態,但狀態不會在配置更改時保留。為此,您必須使用 rememberSaveable。rememberSaveable 會自動保存任何可以保存在 Bundle 中的值。對于其他值,您可以傳入自定義保護程式物件。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/402055.html
