Jetpack Compose 导航:切换目的地时视图消失

问题描述 投票:0回答:1

StackOverflow 社区!

我在使用 NavHost 和 RememberNavController 进行 Jetpack Compose 导航时遇到问题。我的应用程序在大多数情况下都按预期工作,但偶尔,当我点击按钮在屏幕之间切换时,内容会消失,只有 Surface 仍然可见。

这是我的代码的简化版本:

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            val navController = rememberNavController()
            NavigationTestTheme {
                Surface(
                    modifier = Modifier.fillMaxSize(),
                    color = Color.Cyan
                ) {
                    NavHost(navController = navController, startDestination = "First") {
                        composable(route = "First") {
                            FirstScreen(onButtonTap = { navController.navigate("Second") })
                        }
                        composable(route = "Second") {
                            SecondScreen(onButtonTap = { navController.popBackStack() })
                        }
                    }
                }
            }
        }
    }
}

@Composable
fun FirstScreen(onButtonTap: () -> Unit) {
    Box(
        contentAlignment = Alignment.Center,
        modifier = Modifier
            .fillMaxSize()
            .background(Color.Blue)
    ) {
        CustomButton(title = "To Second View") {
            onButtonTap()
        }
    }
}

@Composable
fun SecondScreen(onButtonTap: () -> Unit) {
    Box(
        contentAlignment = Alignment.Center,
        modifier = Modifier
            .fillMaxSize()
            .background(Color.Green)
    ) {
        CustomButton(title = "Pop View") {
            onButtonTap()
        }
    }
}

@Composable
fun CustomButton(title: String, onClick: () -> Unit) {
    Button(
        onClick = { onClick() },
        modifier = Modifier.size(width = 200.dp, height = 40.dp)
    ) {
        Text(text = title)
    }
}

预期的行为是:

  1. 在首次启动时显示第一个屏幕。
  2. 点击 FirstScreen 中的按钮时,导航到 SecondScreen 并将其添加到后堆栈。
  3. 点击 SecondScreen 中的按钮时弹出 SecondScreen,并再次显示 FirstScreen。

但是,有时当我点击 FirstScreen 和 SecondScreen 上的按钮来切换视图时,视图会从后堆栈中删除,并且只有青色的 Surface 仍然可见。

我尝试简化代码并隔离问题,但我似乎无法查明根本原因。任何有关可能导致此问题的原因的建议或见解将不胜感激。

提前感谢您的帮助!

android kotlin navigation android-jetpack-compose
1个回答
0
投票

事实证明,问题是我使用

popBackStack
来关闭当前视图。相反,我使用了 navigateUP,并且效果很好。

© www.soinside.com 2019 - 2024. All rights reserved.