我已经解决这个问题几天了,现在关于在jetpack compose中用args导航。我觉得我错过了一些简单的东西,真的很简单,我不能弄清楚。我试图确保我的编码正确,但无济于事,我仍然得到错误。
因此,错误:无法在导航图中找到与请求NavDeepLink匹配的导航目的地请求{ uri=android-app://androidx.navigation/second_screen/Item Six } NavGraph(0x 0)startDestination={目的地(0x 442 b361 f)route=主页屏幕}
我觉得我做的每件事都是正确的,但还是不能克服这个错误。或者是我遗漏了一些简单的东西。
我的导航主机:
interface NavigationDestination{
val route: String
}
@Composable
fun MainNavHost(
){
val navController = rememberNavController()
NavHost(
navController = navController,
startDestination = HomeScreenNavigation.route,
){
composable(HomeScreenNavigation.route){
HomeScreen(onItemClick = {nameString->
navController.navigate("${SecondNavigationDestination.route}/${nameString}")
{
launchSingleTop = true
}
})
}
composable(
route = SecondNavigationDestination.routeWithArg,
arguments = listOf(navArgument(SecondNavigationDestination.nameArg)
{type = NavType.StringType})
){
SecondScreen()
}
}
}
我的屏幕
第一次筛选:
object HomeScreenNavigation: NavigationDestination{
override val route = "home_screen"
}
@Composable
fun HomeScreen(
modifier: Modifier = Modifier,
onItemClick: (String) -> Unit
){
ItemList(
itemList = LocalData.itemList,
onItemClick = onItemClick
)
}
@Composable
fun ItemList(
itemList: List<ItemModel>,
onItemClick: (String) -> Unit,
modifier: Modifier = Modifier
){
LazyColumn(
verticalArrangement = Arrangement.spacedBy(9.dp)
){
items(
items = itemList,
key = {it.id}
){
Item(
item = it,
onItemClick = onItemClick
)
}
}
}
@Composable
fun Item(
item: ItemModel,
modifier: Modifier = Modifier,
onItemClick: (String) -> Unit
){
Row(
modifier = modifier
.fillMaxWidth()
.padding(9.dp)
.clickable { onItemClick(item.name) },
horizontalArrangement = Arrangement.Center,
verticalAlignment = Alignment.Top
){
Text(
text = item.name
)
}
}
/////////////////////////////////////////////////////////////第二屏:
object SecondNavigationDestination: NavigationDestination{
override val route = "second_screen"
const val nameArg = "nameArg"
val routeWithArg = "${route}/$nameArg"
}
@Composable
fun SecondScreen(
){
val viewModel: MainViewModel = viewModel()
Box(
contentAlignment = Alignment.Center
){
Text(
viewModel.id
)
}
}
/////////////////////////////////////视图模型:
class MainViewModel(
savedStateHandle: SavedStateHandle
): ViewModel(){
val id: String = savedStateHandle[SecondNavigationDestination.nameArg] ?: "empty"
}
1条答案
按热度按时间fafcakar1#
改变这个
到这个
更多信息:文档