如何在 jetpack compose 中导航到另一个屏幕而不出现此问题?

gee*_*eek 3 android kotlin android-jetpack-navigation android-jetpack-compose

我在 Jetpack compose 中导航到另一个屏幕时遇到问题。我已经设置好所有内容,并仔细检查了所有内容,但是,当我按下按钮时,它应该会带到另一个屏幕。我在 logcat 中得到了一些调试信息,这表明导航确实出了问题,并且什么也不会发生。当我试图找出问题时,我发现应该代表第二个屏幕的函数被成功调用,并且当我使用函数 Log.d("Second screen") 时,它将成功地打印在日志猫中。尽管如此,任何内容都不会出现,之前的内容也不会消失。我试着用谷歌搜索它,还询问了聊天gpt,但我没有找到任何东西,聊天gpt只告诉我它应该工作正常,我应该再次检查所有内容。最后,我创建了一个新项目并将代码放入其中,认为可能是某些项目设置导致了问题,但没有任何改变。

这是我的 Main_activity。设置了导航的所有内容以及应该启动它的按钮:

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            ToDoApp2Theme {
                val navController = rememberNavController()
                NavHost(navController = navController, startDestination = Screens.HomeScreen.route) {
                    composable(route = Screens.HomeScreen.route){ Greeting(navController) }
                    composable(route = Screens.AddScreen.route){ Add_screen(navController) }
                }
                Surface(
                    modifier = Modifier.fillMaxSize(),
                    color = MaterialTheme.colorScheme.background
                ) {
                    Greeting(navController)
                }
            }
        }
    }
}

@Composable
fun Greeting(navController: NavController, modifier: Modifier = Modifier) {
    Box(modifier = Modifier
        .width(15.dp)
        .height(20.dp)
        .padding(vertical = 100.dp, horizontal = 100.dp)){
        Button(onClick = {
            navController.navigate(Screens.AddScreen.route)
        }) {
            Text(text = "+")
        }
    }
}

@Preview(showBackground = true)
@Composable
fun GreetingPreview() {
    ToDoApp2Theme {
        val navController = rememberNavController()
        Greeting(navController = navController)
    }
}
Run Code Online (Sandbox Code Playgroud)

屏幕:

package com.example.todoapp2

sealed class Screens(val route: String){
    object HomeScreen : Screens("Greeting")
    object AddScreen : Screens("AddScreen")
}
Run Code Online (Sandbox Code Playgroud)

添加屏幕:

package com.example.todoapp2

import android.util.Log
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.navigation.NavController

@Composable
fun Add_screen(navController: NavController) {
    Text(text = "this is my add screen")
}
Run Code Online (Sandbox Code Playgroud)

我已经在最新版本中实现了导航:2.7.4。我的应用程序没有错误。我认为应该与此相关的 logcat 中的调试是: navgesturemodeswipeFromBottomignore true downX 63 downY 1591 mScreenHeight 1600 mScreenWidth 720 downX 和 downY 的值每次都在变化。每次我按下按钮时都会写入它。我是 jetpack compose 的新手,我没有可以解决此问题的选项。请问有人知道如何解决这个问题吗?

ian*_*ake 5

ANavHost是显示应用程序屏幕的内容。通过添加另一个Surface纯色,您可以有效地用屏幕的另一个副本NavHost完全隐藏实际内容- 该副本也隐藏.GreetingNavHost

因此,只需完全删除另一个屏幕Surface,您就只能看到您的NavHost屏幕和您拨打电话时它在之间交换的屏幕navigate