Сохраняйте положение прокрутки и данные прокрутки при переключении вкладок в Jetpack Compose.Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Сохраняйте положение прокрутки и данные прокрутки при переключении вкладок в Jetpack Compose.

Сообщение Anonymous »

У меня есть две вкладки: «Видео» и «Журнал».
Экраны обеих вкладок идентичны, в качестве пользовательского интерфейса используется Jetpack Compose.
Данные извлекается с помощью библиотеки Paging 3 из общей конечной точки API, отличающейся параметром запроса для возврата списка видео или журналов.
Однако при переключении между вкладками состояние не сохраняется — и состояние прокрутки, и данные подкачки теряются и начинаются с позиции 0 в списке.
Как сохранить состояние (включая положение прокрутки и данные подкачки) при переключении вкладок в Jetpack Compose?

Код: Выделить всё

@OptIn(ExperimentalFoundationApi::class)
@Composable
fun MainScreen(
modifier: Modifier = Modifier,
categoryData: CategoryData?
) {

if (categoryData == null) {
return
}

val items = categoryData.categories

val pagerState = rememberPagerState(pageCount = { items.size })

var selectedTabIndex by rememberSaveable { mutableIntStateOf(0) }

LaunchedEffect(key1 = selectedTabIndex) {

pagerState.scrollToPage(selectedTabIndex)
}

Box(
Modifier.fillMaxSize()
) {

HorizontalPager(
state = pagerState,
userScrollEnabled = false
) { page ->
FeedScreen(selectedTabIndex, categoryData.categories[selectedTabIndex].id) {}
}

Box {

LazyRow(
modifier = Modifier
.fillMaxWidth()
.scrollable(
state = rememberScrollState(),
orientation = Orientation.Horizontal
),
verticalAlignment = Alignment.CenterVertically
) {
itemsIndexed(items) { index, currentTab ->

CustomTab(currentTab.name, selectedTabIndex == index, index) { pos ->
selectedTabIndex = pos
}
}
}

}

}
}`
Это мой вертикальный пейджер

Код: Выделить всё

@OptIn(
ExperimentalFoundationApi::class, ExperimentalPermissionsApi::class
)
@androidx.annotation.OptIn(androidx.media3.common.util.UnstableApi::class)
@Composable
fun FeedScreen(
selectedTabIndex: Int,
tabId: Int
) {
val viewModel: MainScreenViewModel = viewModel()
viewModel.requestedTabId = tabId

val feedItems = viewModel.feedItems.collectAsLazyPagingItems()
val pagerState = rememberPagerState(pageCount = { feedItems.itemCount })

VerticalPager(
state = pagerState,
modifier = Modifier
.fillMaxSize()
.background(LokalTheme.colors.baseBlack)
.clickable(
indication = null,
interactionSource = remember { MutableInteractionSource() }) {
}
.zIndex(0f),
beyondBoundsPageCount = 3,
) { page ->

val item = feedItems[page]

when (item) {
is PostData.VideoData -> {
//Display VideoCard
}

is PostData.MagazineCardData -> {
//Display MagazineCard
}
}
}
}
Пытался сохранить данные в ViewModel, чтобы сохранить состояния, но это не сработало.
Я ожидаю, что вкладки сохранят свое положение прокрутки и данные, когда мы переключаемся между ними.

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

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Сохраняйте положение прокрутки, когда новые элементы добавляются в верхнюю часть списка
    Anonymous » » в форуме IOS
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Задержка/задержка в миллисекундах при переключении вкладок в BottomNavigationView в Android с использованием Java
    Anonymous » » в форуме Android
    0 Ответы
    121 Просмотры
    Последнее сообщение Anonymous
  • Проблема при переключении вкладок в JavaScript
    Гость » » в форуме Jquery
    0 Ответы
    32 Просмотры
    Последнее сообщение Гость
  • Плавная анимация при переключении вкладок
    Anonymous » » в форуме Android
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Как я могу дождаться появления дочерних элементов управления при программном переключении вкладок?
    Anonymous » » в форуме C#
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous

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