Я внедряю нижнюю навигационную панель в JetPack Compose с использованием NavhostController , но навигационная строка не появляется, хотя мое условие для определения его видимости кажется правильной.
Вот моя настройка:
Я имею @serializable . /> < /ol>
@Serializable
data object ProfileScreen
@Serializable
data object FeatureOne
@Serializable
object HomeScreenNavigation
@Serializable
object RegisterNavigation
@Serializable
object SignInNavigation
< /code>
my mometoplevelnavigation < /code> Композитный инициализирует список направлений верхнего уровня и определяет, должна ли навигационная панель быть видна на основе текущего пункта назначения: < /li>
< /ol>
import android.util.Log
import androidx.compose.material3.NavigationBar
import androidx.compose.material3.NavigationBarItem
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
import androidx.compose.ui.res.stringResource
import androidx.navigation.NavDestination.Companion.hierarchy
import androidx.navigation.NavGraph.Companion.findStartDestination
import androidx.navigation.NavHostController
import androidx.navigation.compose.currentBackStackEntryAsState
import androidx.navigation.navOptions
import com.hub.travelandroid.home.ui.R
import com.hub.travelandroid.home.ui.model.HomeTopLevelDestination
import com.hub.travelandroid.home.ui.screen.FeatureOne
import com.hub.travelandroid.home.ui.screen.ProfileScreen
@Composable
fun HomeTopLevelNavigation(navController: NavHostController) {
val homeTopLevelDestinations = listOf(
HomeTopLevelDestination(
titleResId = R.string.profile_menu_item,
route = ProfileScreen.toString()
),
HomeTopLevelDestination(
titleResId = R.string.profile_menu_item,
route = FeatureOne.toString(),
),
)
val navBackStackEntry by navController.currentBackStackEntryAsState()
val currentDestination = navBackStackEntry?.destination
var selectedDestinationRoute by rememberSaveable { mutableStateOf(homeTopLevelDestinations[0].route) }
val isNavigationBarVisible =
currentDestination?.hierarchy?.any { destination ->
homeTopLevelDestinations.any { it.route == destination.route }
} == true
Log.e("TAG", "HomeTopLevelNavigation: $isNavigationBarVisible")
Log.e("TAG", "HomeTopLevelNavigation: currentDestination ${currentDestination?.route}")
Log.e(
"TAG",
"HomeTopLevelNavigation: homeTopLevelDestinations ${homeTopLevelDestinations.first().route}"
)
if (isNavigationBarVisible)
HomeNavigationBar(
homeTopLevelDestinations = homeTopLevelDestinations,
currentDestinationRoute = currentDestination?.route,
onNavigate = { destination ->
navController.navigate(
destination.route,
navOptions {
popUpTo(navController.graph.findStartDestination().id) {
saveState = true
}
launchSingleTop = true
restoreState = true
}
)
selectedDestinationRoute = destination.route
}
)
}
@Composable
fun HomeNavigationBar(
homeTopLevelDestinations: List,
currentDestinationRoute: String?,
onNavigate: (HomeTopLevelDestination) -> Unit
) {
NavigationBar {
homeTopLevelDestinations.forEach { destination ->
NavigationBarItem(
icon = {},
label = { Text(stringResource(destination.titleResId)) },
selected = currentDestinationRoute == destination.route,
onClick = {
onNavigate(destination)
},
)
}
}
}
< /code>
Мой навигационный график выглядит следующим образом: < /li>
< /ol>
@Composable
fun AppNavHost(
startDestination: Any,
navHostController: NavHostController = rememberNavController()
) {
val currentActivity = LocalActivity.current
Scaffold(
bottomBar = {
HomeTopLevelNavigation(navHostController)
}
) {
NavHost(
navController = navHostController,
startDestination = startDestination
) {
registerScreen()
signInScreen()
homeScreen(
onBackPress = {
currentActivity?.finish()
}
)
}
}
}
fun NavGraphBuilder.homeScreen(onBackPress: () -> Unit) {
navigation(startDestination = ProfileScreen) {
composable
{
HomeScreenRoute(onBackPress = onBackPress)
}
composable {
Text("Feature 1")
}
}
}
data class HomeTopLevelDestination(
@StringRes val titleResId: Int,
val route: String,
)
Вопросы :
Я правильно определяю, показывать ли навигационная панель? Навигационная строка правильно отображается, когда в направлении верхнего уровня? val homeTopLevelDestinations = listOf(
HomeTopLevelDestination(
titleResId = R.string.profile_menu_item,
route = Json.encodeToString(ProfileScreen)
),
HomeTopLevelDestination(
titleResId = R.string.profile_menu_item,
route = Json.encodeToString(FeatureOne),
),
)
Подробнее здесь: https://stackoverflow.com/questions/795 ... tion-logic
Нижняя навигационная планка не видно на логике условной навигации ⇐ Android
Форум для тех, кто программирует под Android
-
Anonymous
1744415706
Anonymous
Я внедряю нижнюю навигационную панель в JetPack Compose с использованием NavhostController , но навигационная строка не появляется, хотя мое условие для определения его видимости кажется правильной.
Вот моя настройка:
Я имею @serializable . /> < /ol>
@Serializable
data object ProfileScreen
@Serializable
data object FeatureOne
@Serializable
object HomeScreenNavigation
@Serializable
object RegisterNavigation
@Serializable
object SignInNavigation
< /code>
my mometoplevelnavigation < /code> Композитный инициализирует список направлений верхнего уровня и определяет, должна ли навигационная панель быть видна на основе текущего пункта назначения: < /li>
< /ol>
import android.util.Log
import androidx.compose.material3.NavigationBar
import androidx.compose.material3.NavigationBarItem
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
import androidx.compose.ui.res.stringResource
import androidx.navigation.NavDestination.Companion.hierarchy
import androidx.navigation.NavGraph.Companion.findStartDestination
import androidx.navigation.NavHostController
import androidx.navigation.compose.currentBackStackEntryAsState
import androidx.navigation.navOptions
import com.hub.travelandroid.home.ui.R
import com.hub.travelandroid.home.ui.model.HomeTopLevelDestination
import com.hub.travelandroid.home.ui.screen.FeatureOne
import com.hub.travelandroid.home.ui.screen.ProfileScreen
@Composable
fun HomeTopLevelNavigation(navController: NavHostController) {
val homeTopLevelDestinations = listOf(
HomeTopLevelDestination(
titleResId = R.string.profile_menu_item,
route = ProfileScreen.toString()
),
HomeTopLevelDestination(
titleResId = R.string.profile_menu_item,
route = FeatureOne.toString(),
),
)
val navBackStackEntry by navController.currentBackStackEntryAsState()
val currentDestination = navBackStackEntry?.destination
var selectedDestinationRoute by rememberSaveable { mutableStateOf(homeTopLevelDestinations[0].route) }
val isNavigationBarVisible =
currentDestination?.hierarchy?.any { destination ->
homeTopLevelDestinations.any { it.route == destination.route }
} == true
Log.e("TAG", "HomeTopLevelNavigation: $isNavigationBarVisible")
Log.e("TAG", "HomeTopLevelNavigation: currentDestination ${currentDestination?.route}")
Log.e(
"TAG",
"HomeTopLevelNavigation: homeTopLevelDestinations ${homeTopLevelDestinations.first().route}"
)
if (isNavigationBarVisible)
HomeNavigationBar(
homeTopLevelDestinations = homeTopLevelDestinations,
currentDestinationRoute = currentDestination?.route,
onNavigate = { destination ->
navController.navigate(
destination.route,
navOptions {
popUpTo(navController.graph.findStartDestination().id) {
saveState = true
}
launchSingleTop = true
restoreState = true
}
)
selectedDestinationRoute = destination.route
}
)
}
@Composable
fun HomeNavigationBar(
homeTopLevelDestinations: List,
currentDestinationRoute: String?,
onNavigate: (HomeTopLevelDestination) -> Unit
) {
NavigationBar {
homeTopLevelDestinations.forEach { destination ->
NavigationBarItem(
icon = {},
label = { Text(stringResource(destination.titleResId)) },
selected = currentDestinationRoute == destination.route,
onClick = {
onNavigate(destination)
},
)
}
}
}
< /code>
Мой навигационный график выглядит следующим образом: < /li>
< /ol>
@Composable
fun AppNavHost(
startDestination: Any,
navHostController: NavHostController = rememberNavController()
) {
val currentActivity = LocalActivity.current
Scaffold(
bottomBar = {
HomeTopLevelNavigation(navHostController)
}
) {
NavHost(
navController = navHostController,
startDestination = startDestination
) {
registerScreen()
signInScreen()
homeScreen(
onBackPress = {
currentActivity?.finish()
}
)
}
}
}
fun NavGraphBuilder.homeScreen(onBackPress: () -> Unit) {
navigation(startDestination = ProfileScreen) {
composable
{
HomeScreenRoute(onBackPress = onBackPress)
}
composable {
Text("Feature 1")
}
}
}
data class HomeTopLevelDestination(
@StringRes val titleResId: Int,
val route: String,
)
[b] Вопросы [/b]:
Я правильно определяю, показывать ли навигационная панель? Навигационная строка правильно отображается, когда в направлении верхнего уровня? val homeTopLevelDestinations = listOf(
HomeTopLevelDestination(
titleResId = R.string.profile_menu_item,
route = Json.encodeToString(ProfileScreen)
),
HomeTopLevelDestination(
titleResId = R.string.profile_menu_item,
route = Json.encodeToString(FeatureOne),
),
)
Подробнее здесь: [url]https://stackoverflow.com/questions/79515490/bottom-navigation-bar-not-visible-on-conditional-navigation-logic[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия