在 Jetpack Compose 中更改为一个 activity 到第二个 activity 然后 return 到第一个 activity 后尝试保存我的编辑文本字段的值

trying to save value of my edit text field after changing to one activity to 2nd activity and then return to 1st activity in jetpack compose

  1. 我试图在从一个 activity 更改为另一个
  2. 后保存我的编辑文本值
  3. 例如:就像在注册寻呼机中一样(首先您必须在页面中填写所有数据,最后提交。
  4. 我遇到的问题是如果我想编辑我的第一页数据所以我从第二页移动到第一页但我的第一页没有显示任何数据
  5. 我试过使用保存状态和恢复导航状态,但没有用
class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent { ScreenNavigation() }
    }
}

@Composable
fun Page1(navController: NavHostController) {
    var test = remember { mutableStateOf("") }

    Column() {
        TextField(value = test.value, onValueChange = { test.value = it })
        Button(
            onClick = {
                navController.navigate(ScreenRoute.Page2.name) {
                    popUpTo(ScreenRoute.Page2.name) { saveState = true }
                    launchSingleTop = true

                    restoreState = true
                }
            }
        ) {}

        Text(text = "Page1")
        TextField(
            value = test.value,
            onValueChange = { test.value = it },
        )
    }
}

@Composable
fun Page2(navController: NavHostController) {
    var test = remember { mutableStateOf("") }

    Column() {
        TextField(value = test.value, onValueChange = { test.value = it })
        Button(
            onClick = {
                navController.navigate(ScreenRoute.Page1.name) {
                    popUpTo(ScreenRoute.Page1.name) { saveState = true }
                    launchSingleTop = true

                    restoreState = true
                }
            }
        ) {}
        Text(text = "Page2")
    }
}

// code for navigation

@Composable
fun ScreenNavigation() {
    val navController = rememberNavController()

    NavHost(navController = navController, startDestination = ScreenRoute.Page1.name) {
        composable(ScreenRoute.Page1.name) { Page1(navController) }

        composable(ScreenRoute.Page2.name) { Page2(navController) }
    }
}

// code for screen route
enum class ScreenRoute {
    Page1,
    Page2,
}

在函数之外和函数之上都有变量 class 像这样:

var test1 = mutableStateOf("")
var test2 = mutableStateOf("") 

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent { ScreenNavigation() }
    }
}

@Composable
fun Page1(navController: NavHostController) {
    

    Column() {
        TextField(value = test1.value, onValueChange = { test1.value = it })
        Button(
            onClick = {
                navController.navigate(ScreenRoute.Page2.name) {
                    popUpTo(ScreenRoute.Page2.name) { saveState = true }
                    launchSingleTop = true

                    restoreState = true
                }
            }
        ) {}

        Text(text = "Page1")
        TextField(
            value = test1.value,
            onValueChange = { test1.value = it },
        )
    }
}

@Composable
fun Page2(navController: NavHostController) {


    Column() {
        TextField(value = test2.value, onValueChange = { test2.value = it })
        Button(
            onClick = {
                navController.navigate(ScreenRoute.Page1.name) {
                    popUpTo(ScreenRoute.Page1.name) { saveState = true }
                    launchSingleTop = true

                    restoreState = true
                }
            }
        ) {}
        Text(text = "Page2")
    }
}

// code for navigation

@Composable
fun ScreenNavigation() {
    val navController = rememberNavController()

    NavHost(navController = navController, startDestination =       ScreenRoute.Page1.name) {
        composable(ScreenRoute.Page1.name) { Page1(navController) }

        composable(ScreenRoute.Page2.name) { Page2(navController) }
    }
}

// code for screen route
enum class ScreenRoute {
    Page1,
    Page2,
}
  1. 两个变量都在函数之外
  2. 使用 rememberSaveable
  3. remembersaveable 保存值的状态
       val numberOfFamilyMember = rememberSaveable {
       mutableStateOf("")
   }

尝试像这样使用 rememberSaveable

@Composable
fun Page1(navController: NavHostController) {
var test by rememberSaveable { mutableStateOf("") }

Column() {
    TextField(value = test.value, onValueChange = { test.value = it })
    Button(
        onClick = {
            navController.navigate(ScreenRoute.Page2.name) {
                popUpTo(ScreenRoute.Page2.name) { saveState = true }
                launchSingleTop = true

                restoreState = true
            }
        }
    ) {}

    Text(text = "Page1")
    TextField(
        value = test.value,
        onValueChange = { test.value = it },
    )
}
}

在 Composable 外部使用变量似乎是 side effect

rememberSaveable 应在 activity 根据 docs

更改后保留