Перекомпоновка нескольких компонентов в цикле

У меня простой вопрос по перекомпоновке в Jetpack compose. Я хочу реализовать составной объект, который получает список чего-либо (список может отличаться по размеру, здесь я предполагаю, что он фиксированный) и создавать субкомпозиционный компонент из каждой записи.

      @Composable
fun MyGameComposable(mySomethingList: List<Something>) {
    for(something: Something in mySomethingList){
        SubComposable(something)
    }
}

Я знаю, что компоненты для компоновки составлены друг над другом (и это нормально), но я хочу, чтобы составные элементы 'top' имели логический флаг (он должен реагировать на ввод пользователя, другие должны оставаться в бездействии). Я знаю, что если список большой по размеру, мне следует использовать более «вторичный подход», но пока я хочу проигнорировать это. С помощью обратного вызова (когда был выполнен определенный пользовательский ввод) я хочу сдвинуть логический флаг на второй компонуемый объект (все, кроме второго компонента, должны оставаться в бездействии).

      @Composable
fun MyGameComposable(mySomethingList: List<Something>) {
    for(something: Something in mySomethingList){
        SubComposable(something, isReactingToUserInput, ()->shiftReactToUserInputToNext())
    }
}

Теперь у меня три вопроса (первый напрямую не касается перекомпоновки):

  1. Где я должен определить логическое значение isReactingToUserInput? Я хочу, чтобы он был установлен истинным для верхнего составного элемента, ложным для любого другого в начале. Как только срабатывает первый составной компонент, активируется второй, затем третий и т. Д.
  2. Когда срабатывает shiftReactToUserInputToNext(), как работает перекомпоновка? Перебирает ли он весь список и обновляет каждое значение isReactingToUserInput? Это кажется действительно трудоемким, если предположить, что придется заново создавать все компоненты, которые можно компоновать.
  3. В моем подходе все составные объекты останутся в списке (независимо от их активного / бездействующего статуса). Как я могу реализовать, чтобы составной компонент, который запускал shiftReactToUserInputToNext(), не только устанавливает еще один «активным», но также удаляется из списка. Это, вероятно, относится к вопросу 2): если я удаляю что-то из списка, compose снова перебирает все оставшиеся элементы и должен снова создавать все.

Дело в том, что я хочу, чтобы это было очень отзывчивым. Именно поэтому MyGameComposable получает весь список напрямую. Создание 100 Composables друг над другом может занять некоторое время (для меня это не проблема), но я не хочу, чтобы compose делал это каждый раз, когда что-то меняется.

0 ответов

Другие вопросы по тегам