Как обрабатывать логику обратной навигации для пейджера с горизонтальным просмотром и вложенными подэкранами в Jetpack CAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Как обрабатывать логику обратной навигации для пейджера с горизонтальным просмотром и вложенными подэкранами в Jetpack C

Сообщение Anonymous »

Как написать логику для пейджерных экранов с горизонтальным просмотром. У меня есть 4 основных экрана, и на этих 4 экранах каждый экран имеет несколько экранов, или вид зависит от того, насколько подходит логика, потому что есть кнопка «Назад», на которой необходимо будет выполнять всю навигацию по экрану назад. дескриптор.
Кнопка «Назад» находится в верхней панели, которую я считаю общей.
Я создаю приложение для Android с помощью Jetpack Compose, где у меня есть пейджер с горизонтальным просмотром (HorizontalPager) с 4 основными экранами и индикатором пейджера, показывающим текущее положение пользователя. Каждый главный экран имеет собственный набор подэкранов, структурированных следующим образом:
  • Первый экран: 0 подэкранов
    < li>Второй экран: 4 подэкрана
  • Третий экран: 2 подэкрана
  • Четвертый экран: 0 подэкранов
Требования:
  • Обработка обратной навигации - У меня есть кнопка «Назад» в верхней панели (общая для всех экранов), которая должна обрабатывать навигацию двумя способами:


[*]Если пользователь находится на подэкране (например, подэкране 3 на втором экране), нажатие кнопки «Назад» должно вернуть его на первый подэкран главного экрана (например, на первый подэкран второго экрана).
[*]Если они уже находятся на первом подэкране главного экрана, нажатие кнопки «Назад» должно переместить их на предыдущий главный экран пейджера.


[*]Индикатор пейджера[/b] – индикатор пейджера должен точно отражать текущий главный экран.
< /ol>
Я ищу лучший подход для обработки этого типа вложенной навигации в Jetpack Compose, в частности для управления обратными стопками на каждом главном экране и обеспечения плавных переходов между подэкранами и основными экранами в пейджер просмотра.
@Composable
fun AddDeviceFlow() {

Scaffold(modifier = Modifier
.fillMaxSize()
.statusBarsPadding(),
topBar = {
AddDeviceAppBar(modifier = Modifier,
showCloseButton = true,
showBackButton = false,
onClickBackButton = {
// handle viewpager screens and nested screens pop back navigation
},
onClickCloseButton = {})
}
) { innerPadding ->
Surface(modifier = Modifier.padding(innerPadding)) {
Box(
modifier = Modifier
.fillMaxSize()
.padding(16.dp)
) {
HorizontalPagerWithGradientIndicators()
}
}

}
}

@Composable
fun HorizontalPagerWithGradientIndicators() {
val pagerState = rememberPagerState(pageCount = { 4 })
val isLastPage = pagerState.currentPage == pagerState.pageCount - 1
val coroutineScope = rememberCoroutineScope()

val constraintSet = ConstraintSet {
val (
pager,
pagerIndicator
) = createRefsFor(
"pager",
"pagerIndicator"
)

constrain(pagerIndicator) {
top.linkTo(parent.top)
bottom.linkTo(pager.top)
centerHorizontallyTo(parent)
}

constrain(pager) {
top.linkTo(pagerIndicator.bottom)
bottom.linkTo(parent.bottom)
centerHorizontallyTo(parent)
}

}
ConstraintLayout(
constraintSet = constraintSet,
modifier = Modifier
) {
// here is stepper code I removed for brevity

HorizontalPager(
state = pagerState,
modifier = Modifier
.fillMaxWidth()
.layoutId("pager"),
) {

}

}
}


Подробнее здесь: https://stackoverflow.com/questions/791 ... ted-sub-sc
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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