Jetpackは、ナビゲーションを作成し、引数を送信します.
18412 ワード
皆さんこんにちは.私は、Tolga Caglayanです.今日は、Jetpackの構成ナビゲーションで動作する方法を示します.Jetpack構成は新興技術である時には我々は、特定のものを使用する方法についての情報を見つけるのに苦労している.そういうわけで、私はナビゲーションを使う方法に関する記事を書く必要を感じました.
では始めましょう.
サンプル申請:https://github.com/togisoft/JetpackNavigationExample最初に、ナビゲーションパッケージを作成したJetpack Composeプロジェクトに追加します.
その後、我々はフォルダとファイルを作成します.私たちはスクリーンのルートのために密封されたクラスをつくります.州のフォルダのKT.
我々は、ホームメイドのために我々のコードをつくります
我々は、Detailscreenのために我々のコードをつくります
メインアクティビティファイルを編集し、プログラムを実行します.
では始めましょう.
サンプル申請:https://github.com/togisoft/JetpackNavigationExample
その後、我々はフォルダとファイルを作成します.
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")
}
}
}
}
}
@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()
}
}
}
}
**ファイナル*Reference
この問題について(Jetpackは、ナビゲーションを作成し、引数を送信します.), 我々は、より多くの情報をここで見つけました https://dev.to/caglayantolga/creating-jetpack-compose-navigation-and-submitting-arguments-37b6テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol