たくさんの自由帳
Androidのお話
たくさんの自由帳
投稿日 : | 0 日前
文字数(だいたい) : 354
どうもこんにちは。
楽天モバイルのテザリングでこの記事書いてます。
Jetpack ComposeでViewModelを使うときどうすればええの?
ViewModelにKeyを内部的に付けてくれるので、同じスコープでも複数のViewModelが持てました。よく考えてある
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
ComposeViewModelTheme {
// A surface container using the 'background' color from the theme
Surface(color = MaterialTheme.colors.background) {
val currentPageName = remember { mutableStateOf("home") }
Scaffold(
bottomBar = {
BottomNavigation {
BottomNavigationItem(
selected = currentPageName.value == "home",
onClick = { currentPageName.value = "home" },
label = { Text(text = "Home") },
icon = { Icon(painter = painterResource(id = R.drawable.ic_baseline_home_24), contentDescription = "home") }
)
BottomNavigationItem(
selected = currentPageName.value == "notification",
onClick = { currentPageName.value = "notification" },
label = { Text(text = "Notification") },
icon = { Icon(painter = painterResource(id = R.drawable.ic_baseline_notifications_24), contentDescription = "notification") }
)
}
}
) {
// ページ切り替え
when (currentPageName.value) {
"home" -> HomeScreen()
"notification" -> NotificationScreen()
}
}
}
}
}
}
}
@Composable
fun HomeScreen() {
val viewModel = viewModel<HomeViewModel>()
Text(text = "Home Screen ${viewModel.hashCode()}")
}
@Composable
fun NotificationScreen() {
val viewModel = viewModel<NotificationViewModel>()
Text(text = "Notification is empty ${viewModel.hashCode()}")
}
にも対応しています。
class InfoViewModel(application: Application, private val gameId: Int) : AndroidViewModel(application) {
}
class InfoViewModelFactory(val application: Application, val gameId: Int) : ViewModelProvider.Factory {
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
return InfoViewModel(application, gameId) as T
}
}
GameInfoScreen(viewModel = viewModel(factory = InfoViewModelFactory(application, "contentId")))
@Composable
fun GameInfoScreen(viewModel: InfoViewModel) {
// 省略
}
以上です。
一つのActivityにJetpack Composeで2画面実現してます
https://github.com/takusan23/ErogameScapeDroid
Jetpack Composeで書き直したいけど時間がない。