Open3
【Android】実装メモ
概要
- Architecture Sampleリポジトリのクローンを作成する過程のメモ
https://github.com/android/architecture-samples
ViewModelで、SavedHandleStateを受け取る
- SavedStateHandleを経由してrouteから情報を受け取ることができる。
- これはHiltの機能ではなく、ViewModelの機能である。
- NavControllerのrouteで、リソースIDを受け取った場合などのケースで利用
TaskNavGraph.kt
@Composable
fun TodoNavGraph(
modifier: Modifier = Modifier,
navController: NavHostController = rememberNavController(),
) {
NavHost(
navController = navController,
startDestination = "tasks",
modifier = modifier
) {
composable(
"tasks"
) {
TasksScreen(
// TasksScreenにはタスクがリストに並び、そのリストの一つをタップすると
// onTaskClickによってdetailに遷移する
onTaskClick = { task -> navController.navigate("task/${task.id}") }
)
}
composable(
// ここのtaskIdをどのように次の画面で受け取るのか?が今回の実験
"task/{taskId}"
) {
TaskDetailScreen()
}
}
}
TaskDetailScreen.kt
@Composable
fun TaskDetailScreen(
viewModel: TaskDetailViewModel = viewModel()
) {
Text(text = "TaskDetailScreen")
}
TaskDetailViewModel.kt
class TaskDetailViewModel(
savedStateHandle: SavedStateHandle
) : ViewModel() {
val taskId: String = savedStateHandle["taskId"]!!
init { Log.d("[Sample]", "taskId: $taskId") } // 出力: taskId: 077131ce-be04-4d4e-9362-230670011397
}
可視性
- トップレベル宣言の場合は、ファイルプライベートかどうか?に影響する
// file name: example.kt
package foo
private fun foo() { ... } // visible inside example.kt
public var bar: Int = 5 // property is visible everywhere
private set // setter is visible only in example.kt
internal val baz = 6 // visible inside the same module