Mit AndroidFragment in Compose wird BottomNavigation neu erstellt
Posted: 17 Jan 2025, 09:19
Ich habe eine MainActivity, die Jetpack Compose verwendet, um ein Gerüst mit einer BottomBar einzurichten. Die BottomBar verwaltet einen NavHost, der zusammensetzbare Elemente enthält, zu denen auch AndroidFragment gehört.
Beim Wechseln zwischen Registerkarten fällt mir auf, dass die Fragmente neu erstellt werden. Wie kann ich die Fragmente behalten, damit sie ihre Daten nicht neu laden?
Beim Wechseln zwischen Registerkarten fällt mir auf, dass die Fragmente neu erstellt werden. Wie kann ich die Fragmente behalten, damit sie ihre Daten nicht neu laden?
Code: Select all
internal fun NavGraph(
navController: NavHostController,
modifier: Modifier = Modifier
) {
NavHost(
navController = navController,
modifier = modifier,
startDestination = Screen.FrontPage
) {
composable {
AndroidFragment(clazz = FrontPageFragment::class.java)
}
composable {
AndroidFragment(clazz = LatestPageFragment::class.java)
}
}
}
Code: Select all
@AndroidEntryPoint
class MainActivity : BaseActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
Theme {
Content()
}
}
}
}
@Composable
private fun Content() {
val navController = rememberNavController()
var isSelectedIndex by rememberSaveable { mutableIntStateOf(0) }
val screens = listOf(
Screen.FrontPage,
Screen.LatestPage
)
Scaffold(
bottomBar = {
NavigationBar() {
screens.forEach { screen ->
val currentIndex = screens.indexOf(screen)
NavigationBarItem(
icon = {
Image(
painter = painterResource(screen.icon),
contentDescription = null
)
},
label = { Text(screen.title) },
selected = isSelectedIndex == currentIndex,
onClick = {
isSelectedIndex = currentIndex
navController.navigate(screen)
},
)
}
}
},
content = { innerPadding ->
NavGraph(
navController = navController,
modifier = Modifier.padding(innerPadding)
)
}
)
}