Виджет Android NumberPicker не работает должным образом в Jetpack Compose HorizontalPagerAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Виджет Android NumberPicker не работает должным образом в Jetpack Compose HorizontalPager

Сообщение Anonymous »

NumberPicker (android.widget.NumberPicker) не работает должным образом, когда он помещен в Jetpack Compose HorizontalPager
Среднее число исчезает после прокрутки трех страниц, а затем возвращается на страницу выбора: p>
Изображение

Это происходит, следовательно, пейджер сохраняет только 3 экрана одновременно (текущий, предыдущий и следующий). Когда мы прокручиваем до 3-й страницы, а затем прокручиваем назад, страница выбора перестраивается, и поэтому мы можем наблюдать такую ​​​​ошибку.
Я пробовал сделать недействительным метод в области обновления компонуемого AndroidView Picker. , но это не помогает.
Есть предложения по решению проблемы? Спасибо!
Код, воспроизводящий проблему:
BuildSrc приложения:

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

//ACCOMPANIST
api "com.google.accompanist:accompanist-pager:0.27.0"
api "com.google.accompanist:accompanist-pager-indicators:0.27.0"

//COMPOSE
implementation platform('androidx.compose:compose-bom:2022.10.00')
implementation "androidx.compose.ui:ui"
implementation 'androidx.compose.material:material'
implementation 'androidx.activity:activity-compose:1.6.1'
MainActivity:

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

import android.os.Bundle
import android.widget.NumberPicker
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.*
import androidx.compose.material.*
import androidx.compose.runtime.Composable
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import androidx.compose.ui.viewinterop.AndroidView
import com.example.composepagerpickerissue.ui.theme.ComposePagerPickerIssueTheme
import com.google.accompanist.pager.ExperimentalPagerApi
import com.google.accompanist.pager.HorizontalPager
import com.google.accompanist.pager.rememberPagerState
import kotlinx.coroutines.launch

class MainActivity : ComponentActivity() {
@OptIn(ExperimentalPagerApi::class)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
ComposePagerPickerIssueTheme {
val coroutineScope = rememberCoroutineScope()

val pages = listOf(
Page.PickerPage,
Page.EmptyPage,
Page.EmptyPage,
Page.EmptyPage,
Page.PickerPage,
)

val pagerState = rememberPagerState(0)

val onNextPage: () -> Unit = {
coroutineScope.launch { pagerState.animateScrollToPage(page = pagerState.currentPage + 1) }
}
val onPreviousPage: () -> Unit = {
coroutineScope.launch {
pagerState.animateScrollToPage(
page = (pagerState.currentPage - 1).takeIf { it >= 0 } ?: 0
)
}
}

Column {

HorizontalPager(
count = pages.size,
state = pagerState,
modifier = Modifier.weight(1f, true)
) { page ->
pages[page].screen()
}

Row(
modifier = Modifier.padding(16.dp),
horizontalArrangement = Arrangement.spacedBy(8.dp)
) {
OutlinedButton(
modifier = Modifier.weight(1f),
onClick = onPreviousPage
) { Text("Back") }
Button(
modifier = Modifier.weight(1f),
onClick = onNextPage
) { Text("Next") }
}
}
}
}
}
}

@Composable
fun SimpleNumberPicker(
value: Int,
min: Int = 0,
max: Int = Int.MAX_VALUE,
onValueChange: (Int) -> Unit
) {
AndroidView(
modifier = Modifier.fillMaxWidth(),
factory = { context ->
NumberPicker(context).apply {
setOnValueChangedListener { numberPicker, i, i2 ->
onValueChange(i)
}
minValue = min
maxValue = max
this.value = value
}
},
update = {}
)
}

sealed class Page(var screen: @Composable () -> Unit) {
object EmptyPage : Page(
screen = { Box(modifier = Modifier.fillMaxSize()) { Text(text = "Empty screen") } })

object PickerPage : Page(
screen = { Column(modifier = Modifier.fillMaxSize()) { SimpleNumberPicker(150) {} } })
}
Изображение


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

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Виджет Android numberpicker не работает должным образом в JetPack Compose HorizontalPager
    Anonymous » » в форуме Android
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Бесконечный HorizontalPager внутри вложенного HorizontalPager нельзя прокручивать
    Anonymous » » в форуме Android
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Сделал виджет с GUI API в Jetpack Compose. Кнопка, заполняющая весь виджет
    Anonymous » » в форуме Android
    0 Ответы
    44 Просмотры
    Последнее сообщение Anonymous
  • Последовательность специальных возможностей не работает с «HorizontalPager» в Android Jetpack Compose
    Гость » » в форуме Android
    0 Ответы
    36 Просмотры
    Последнее сообщение Гость
  • Мягкая привязка HorizontalPager в Android Jetpack Compose
    Anonymous » » в форуме Android
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous

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