Нижняя навигационная планка не видно на логике условной навигацииAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Нижняя навигационная планка не видно на логике условной навигации

Сообщение 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,
)


Вопросы :

Я правильно определяю, показывать ли навигационная панель? Навигационная строка правильно отображается, когда в направлении верхнего уровня? 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»