Как отделить состояние прокрутки в макете вкладок в Android Compose UiAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как отделить состояние прокрутки в макете вкладок в Android Compose Ui

Сообщение Anonymous »

Я рисую пользовательский интерфейс с помощью Android Compose.
Он состоит из двух вкладок, каждая из которых отображает данные в LazyColumn.
Поскольку тип данных одинаков для обеих вкладок, мы нарисовали Пользовательский интерфейс с одним LazyColumn.
Код выглядит следующим образом

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

class MyViewModel: ViewModel() {
val items1: SnapshotStateList = mutableStateListOf()
val items2: SnapshotStateList = mutableStateListOf()

var selectedTabIdx: Int by mutableStateOf(0)
private set

fun onTabSelected(idx: Int) {
selectedTab = idx
}
}

@Composable
fun MyScreen(
selectedTabIdx: Int,
itemList1: List,
itemList2: List,
onTabSelected: (Int) -> Unit
) {
TabUi(...)

ItemList(
items = if (selectedTabIdx == 0) itemList1 else itemList2
)
}

@Composable
fun ItemList(
items: List
) {
LazyColumn {
items(items) { item ->
ItemUi(item)
}
}
}
Проблема в том, что после прокрутки первой вкладки при выборе второй вкладки вторая вкладка прокручивается в ту же позицию.
Если вы продублируете код, как показано ниже, проблема будет решена.

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

@Composable
fun MyScreen(
selectedTabIdx: Int,
itemList1: List,
itemList2: List,
onTabSelected: (Int) -> Unit
) {
TabUi(...)

if (selectedTabIdx == 0) {
ItemList1(
items = itemList1
)
} else {
ItemList2(
items = itemList2
)
}
}

@Composable
fun ItemList1(
items: List
ItemUi(item)
}
}
}

@Composable
fun ItemList2(
items: List
) {
LazyColumn {
items(items) { item ->
ItemUi(item)
}
}
}
Однако у этого кода также есть проблема: если вы прокручиваете первую вкладку, нажимаете вторую вкладку, а затем снова нажимаете первую вкладку, предыдущая прокрутка не сохраняется.
/>Также существует проблема, что сам код дублируется.
Как это исправить?

Подробнее здесь: https://stackoverflow.com/questions/783 ... compose-ui
Ответить

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

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

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

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

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