没有xml的Android jetpack撰写 fragment

标签 android android-jetpack-compose

晚安!我正在使用drawerContent和navigationIcon来创建菜单,但是我可以创建一个没有xml的Fragment()吗?在组成喷气背包。如果有人有任何引用,我将不胜感激......

最佳答案

使用 Compose,您可以尝试不同的东西。
您可以使用 Navigation component 在可组合项之间导航(目前在 1.0.0-alpha10 中)
创建 NavController和:

val navController = rememberNavController()
并定义一个 NavHost与目的地:
NavHost(
    navController,
    startDestination = "entry1"
) {
    composable("entry1") { Entry1(..) }
    composable("entry2") { Entry2(..) }
    composable("entry3") { Entry3(..) }
}
为了简化导航,只需创建一个密封类(这不是强制性的)。
sealed class Screen(val route: String, @StringRes val resourceId: Int) {
    object Entry1 : Screen("entry1", R.string.entry1)
    object Entry2 : Screen("entry2", R.string.entry2)
    object Entry3 : Screen("entry3", R.string.entry3)
}
并更改 NavHost至:
NavHost(
    navController,
    startDestination = Screen.Entry1.route
) {
    composable(Screen.Entry1.route) { Entry1(/*..*/) }
    composable(Screen.Entry2.route) { Entry2(/*..*/) }
    composable(Screen.Entry3.route) { Entry3(/*..*/) }
}
现在只需使用 Scaffold 创建一个drawerContent和navigationIcon来打开菜单并导航到目的地:
val navController = rememberNavController()
val current by navController.currentBackStackEntryAsState()
val scaffoldState = rememberScaffoldState()
val scope = rememberCoroutineScope()

val items = listOf(
    Screen.Entry1,
    Screen.Entry2,
    Screen.Entry3
)

Scaffold(
    scaffoldState = scaffoldState,
    drawerContent = {
        //val currentRoute = current?.arguments?.getString(KEY_ROUTE)
        val currentRoute = current?.destination?.route

        items.forEach { screen ->
            val selected = currentRoute == screen.route
            val selectedColor = if (selected) Color.Yellow else Color.Transparent
            Row(modifier = Modifier
                .fillMaxWidth()
                .height(32.dp)
                .background(selectedColor)
                .clickable {
                    scope.launch { scaffoldState.drawerState.close()}
                    navController.navigate(screen.route) {
                        popUpTo = navController.graph.startDestination
                        launchSingleTop = true
                    }
                }) {
                   Text(stringResource(screen.resourceId))
            }
        }
    },
    topBar = {
        TopAppBar(){
            IconButton(
                onClick = {
                    scope.launch { scaffoldState.drawerState.open() }
                }
            ) {
                Icon(Icons.Filled.Menu,"")
            }
        }
    },
    content = {
        NavHost(
            navController,
            startDestination = Screen.Entry1.route
        ) {
          composable(Screen.Entry1.route) { Entry1(/*..*/) }
          composable(Screen.Entry2.route) { Entry2(/*..*/) }
          composable(Screen.Entry3.route) { Entry3(/*..*/) }
        }
    }
)
在哪里:
@Composable
fun Entry1(navigateTo: () -> Unit) {

    Column(){
         /*.....*/
    }
}
enter image description here

关于没有xml的Android jetpack撰写 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67133781/

相关文章:

kotlin - 如何在 Canvas jetpack compose 上绘制 ImageVector

android - 重叠两个 Box jetpack 组合

android - 状态值更改时屏幕不重组 - Jetpack Compose

android - 从android照片库复制图片会导致错误

android - 附加了 ORMlite 的 Javadoc,但 Eclipse 找不到

Android WebView JQuery 移动水平滚动

kotlin - 无法解析: androidx. compose.ui:ui-tooling和其他模块

android - BitmapFactory decodeFile FileNotFoundException

android - 如何在 beaglebone black 上使用 RS485

android - Jetpack 组成 : No method shouldWaitForActivitiesToComplete()