后处理程序在喷气背包组合中不工作



嘿,我正在使用这个堆栈流中的BackHandler。当我按下后退按钮时,它不起作用。有人能指导我吗。

结果屏幕.kt

@Composable
fun ResultScreen(navController: NavHostController, nearestResultList: List<NearestResult>?) {
SportsResultTheme {
MainScaffold {
BackHandler {
navController.popBackStack()
}
LazyColumn {
if (nearestResultList != null) {
items(nearestResultList) { nearestResult ->
Text(
text = nearestResult.event
)
}
}
}
}
}
}

NavigationGraph.kt

@Composable
internal fun NavigationGraph() {
val navController = rememberNavController()
NavHost(navController = navController, startDestination = ScreenRoute.Home.route) {
composable(ScreenRoute.Home.route) {
SetupMainActivityView { nearestResult ->
val nearestResultJson = Uri.encode(Json.encodeToString(nearestResult))
navController.navigate(ScreenRoute.Result.route + "/$nearestResultJson")
}
}
composable(
ScreenRoute.Result.route + "/{$NEAREST_RESULT_JSON}",
arguments = listOf(
navArgument(NEAREST_RESULT_JSON) { type = NearestResultParamType() }
)
) { backStackEntry ->
ResultScreen(navController, backStackEntry.arguments?.getParcelableArrayList(NEAREST_RESULT_JSON))
}
}
}

如果您想查看更多信息,请访问我的存储库。

更新

你可以看到我的视频链接。有人知道当我按下后为什么我的scren弹吗?

更新2

我在导航中添加了启动屏幕

@Composable
internal fun NavigationGraph() {
val navController = rememberNavController()
NavHost(navController = navController, startDestination = ScreenRoute.Splash.route) {
composable(route = ScreenRoute.Splash.route) {
SplashScreen(navController = navController)
}
composable(ScreenRoute.Home.route) {
SetupMainActivityView { nearestResult ->
val nearestResultJson = Uri.encode(Json.encodeToString(nearestResult))
navController.navigate(ScreenRoute.Result.route + "/$nearestResultJson") {
popUpTo(navController.graph.findStartDestination().id) {
saveState = true
}
launchSingleTop = true
restoreState = true
}
}
}
composable(
ScreenRoute.Result.route + "/{$NEAREST_RESULT_JSON}",
arguments = listOf(
navArgument(NEAREST_RESULT_JSON) { type = NearestResultParamType() }
)
) { backStackEntry ->
ResultScreen(navController, backStackEntry.arguments?.getParcelableArrayList(NEAREST_RESULT_JSON))
}
}
}

更新3

navController.navigate(ScreenRoute.Result.route + "/$nearestResultJson") {
popUpTo(ScreenRoute.Home.route) {
saveState = true
}
launchSingleTop = true
restoreState = true
}

当我添加启动屏幕时,返回不起作用

更新4

@Composable
internal fun NavigationGraph() {
val navController = rememberNavController()
var home by remember {
mutableStateOf<String?>(null)
}
NavHost(navController = navController, startDestination = home ?: ScreenRoute.Splash.route) {
composable(route = ScreenRoute.Splash.route) {
home = ScreenRoute.Home.route
SplashScreen(navController = navController)
}
composable(ScreenRoute.Home.route) {
SetupMainActivityView { nearestResult ->
val nearestResultJson = Uri.encode(Json.encodeToString(nearestResult))
navController.navigate(ScreenRoute.Result.route + "/$nearestResultJson") {
popUpTo(navController.graph.findStartDestination().id) {
saveState = true
}
launchSingleTop = true
restoreState = true
}
}
}
composable(
ScreenRoute.Result.route + "/{$NEAREST_RESULT_JSON}",
arguments = listOf(
navArgument(NEAREST_RESULT_JSON) { type = NearestResultParamType() }
)
) { backStackEntry ->
ResultScreen(navController, backStackEntry.arguments?.getParcelableArrayList(NEAREST_RESULT_JSON))
}
}
}

当初始应用程序加载时,我的启动屏幕不工作。它直接打开我的主屏幕后,结果屏幕返回按钮再次不工作。

尝试navController.navigateUp()堆栈可能有很多条目,请尝试使用单例导航到堆栈中没有像这样的不需要的条目

navController.navigate("destination") {
popUpTo(navController.graph.findStartDestination().id) {
saveState = true
}
launchSingleTop = true
restoreState = true
}

尝试使用动态起始目的地,如

var home by remember {
mutableStateOf<String?>(null)
}
NavHost(
navController = navController,
startDestination = home?:"splash_destination",
modifier = modifier
) {
composable("splash) {
home = "home_destination"
....
}
.....
}

然后按照前面的方法

最新更新