android - 尝试在将一个 Activity 更改为第二个 Activity 后保存编辑文本字段的值,然后返回到 jetpack compose 中的第一个 Activity

标签 android navigation android-jetpack-compose android-jetpack-compose-text

  1. 我尝试在从一项 Activity 更改为另一项 Activity 后保存编辑文本值
  2. 例如:就像在注册寻呼机中一样(首先您必须填写页面中的所有数据,最后提交。
  3. 我遇到的问题是,如果我想编辑第一页数据,所以我从第二页移到第一页,但我的第一页不显示任何数据
  4. 我尝试使用保存状态和恢复导航状态,但没有帮助
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,
}

最佳答案

在函数和上面的类之外都有变量,如下所示:

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,
}

关于android - 尝试在将一个 Activity 更改为第二个 Activity 后保存编辑文本字段的值,然后返回到 jetpack compose 中的第一个 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70530301/

相关文章:

ios - 关闭 ViewController 时触发 ViewWillAppear 和 ViewDidAppear

html - 如何使我的导航栏居中?

android - Jetpack compose navigation popUpTo inclusive true 未从 backstack 清除可组合屏幕

java - 使用改造 2 分段上传失败

Android - 应用程序更新时的 Firebase 远程配置缓存

c++ - 从 2 个给定的一维线计算坐标

android - Jetpack 导航组件与 Jetpack Compose 兼容吗?

android - Jetpack Compose 中的作用域状态

android - 启动 APK 安装器 Oreo

java - 如何在 Java 服务器中重新创建由 Android 压缩的 JPEG 文件