Jetpackは、ナビゲーションを作成し、引数を送信します.


皆さんこんにちは.私は、Tolga Caglayanです.今日は、Jetpackの構成ナビゲーションで動作する方法を示します.Jetpack構成は新興技術である時には我々は、特定のものを使用する方法についての情報を見つけるのに苦労している.そういうわけで、私はナビゲーションを使う方法に関する記事を書く必要を感じました.
では始めましょう.
サンプル申請:https://github.com/togisoft/JetpackNavigationExample
  • 最初に、ナビゲーションパッケージを作成したJetpack Composeプロジェクトに追加します.

  • その後、我々はフォルダとファイルを作成します.
  • 私たちはスクリーンのルートのために密封されたクラスをつくります.州のフォルダのKT.
  • sealed class Screen(val route: String) {
        object HomeScreen : Screen(route ="home")
        object DetailScreen : Screen(route = "detail")
    
        // To send multiple arguments
        fun withArgs(vararg args: String): String {
            return buildString {
                append(route)
                args.forEach { arg ->
                    append("/$arg")
                }
            }
        }
    }
    
  • 我々は、ホームメイドのために我々のコードをつくります
  • @Composable
    fun HomeScreen(navController: NavController) {
        var name by remember { mutableStateOf("") }
        var surname by remember { mutableStateOf("") }
        val context = LocalContext.current
    
        Scaffold(
            topBar = {
                TopAppBar(title = { Text(text = "Home Screen") })
            }
        ) {
            Box(modifier = Modifier.fillMaxSize()) {
                Column(
                    modifier = Modifier
                        .fillMaxSize()
                        .padding(16.dp),
                    verticalArrangement = Arrangement.Center,
                    horizontalAlignment = Alignment.CenterHorizontally
                ) {
                    OutlinedTextField(
                        value = name,
                        label = { Text(text = "Name") },
                        onValueChange = { name = it },
                        modifier = Modifier.padding(vertical = 16.dp)
                    )
                    OutlinedTextField(
                        value = surname,
                        label = { Text(text = "Surname") },
                        onValueChange = { surname = it },
                        modifier = Modifier.padding(vertical = 16.dp)
                    )
                    Button(onClick = {
                       // Check if textfields are null
                        if (name.isNotEmpty()) {  
    //With route arguments for Detail Screen.                  navController.navigate(Screen.DetailScreen.withArgs(name, surname))
                        } else {
                            Toast.makeText(context, "Fill in the required fields.", Toast.LENGTH_SHORT)
                                .show()
                        }
                    }) {
                        Text(text = "Send Detail Screen")
                    }
                }
            }
        }
    }
    
  • 我々は、Detailscreenのために我々のコードをつくります
  • @Composable
    fun DetailScreen(name: String?, surname: String?, navController: NavController) {
    
        Scaffold(
            topBar = {
                TopAppBar(title = { Text(text = "Detail Screen") }, navigationIcon = {
                    IconButton(
                        onClick = {
                            navController.popBackStack()
                        }) {
                        Icon(imageVector = Icons.Rounded.ArrowBack, contentDescription = "posStackBack")
                    }
                })
            }
        ) {
            Box(modifier = Modifier.fillMaxSize()) {
                Column(
                    modifier = Modifier
                        .fillMaxSize()
                        .padding(16.dp),
                    verticalArrangement = Arrangement.Center,
                    horizontalAlignment = Alignment.CenterHorizontally
                ) {
                    Text(text = "Hello $name $surname", fontWeight = FontWeight.Bold)
                }
            }
        }
    }
    
    現在、我々はナビゲーションをつくります
    @Composable
    fun Navigation() {
        val navController = rememberNavController()
        NavHost(navController = navController, startDestination = Screen.HomeScreen.route) {
            composable(route = Screen.HomeScreen.route) {
                HomeScreen(navController = navController)
            }
            composable(route = Screen.DetailScreen.route + "/{name}/{surname}",
                arguments = listOf(
                    navArgument("name") {
                        type = NavType.StringType
                        nullable = false
                    },
                    navArgument("surname") {
                        type = NavType.StringType
                        nullable = false
                    }
                )
            ) { entry ->
                DetailScreen(
                    name = entry.arguments?.getString("name"),
                    surname = entry.arguments?.getString("surname"),
                    navController = navController
                )
            }
        }
    }
    
  • メインアクティビティファイルを編集し、プログラムを実行します.
  • class MainActivity : ComponentActivity() {
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContent {
                DevToTheme {
                    Navigation()
                }
            }
        }
    }
    
    **ファイナル*