Реагировать на проблему навигации по встроенному плоскому списку

Я использую плоский список в качестве корневого контейнера для прокрутки. Flat list содержит в себе RecyclerListView. Каждая строка плоского списка - это RecyclerListView. Каждая строка Flat list не имеет фиксированной высоты. поэтому я использую getItemLayout, чтобы вернуть правильное значение смещения.

const getItemLayout = (dat, index) => {
    let offset
    let dataItem
    if (index === 1) {
      offset = Constants.BrowseSettings.REGULAR_LAYOUT_HEIGHT + Constants.BrowseSettings.CAROUSEL_TITLE_HEIGHT
      dataItem = { length: getDimensions(index).height, offset, index }
    } else if (index === 0) {
      offset = 0
      dataItem = { length: 0, offset, index }
    } else {
      console.log(Constants.BrowseSettings.MIXED_LAYOUT_HEIGHT + Constants.BrowseSettings.CAROUSEL_TITLE_HEIGHT)
      console.log(Constants.BrowseSettings.REGULAR_LAYOUT_HEIGHT + Constants.BrowseSettings.CAROUSEL_TITLE_HEIGHT)

      const multipleBlock = Math.floor((index - 1) / 4)
      const remainingBlock = (index - 1) % 4
      let totalOffset = BLOCK_SIZE_OFFSET * multipleBlock
      if (remainingBlock > 0) {
        switch (remainingBlock) {
          case 1:
            totalOffset += DOUBLE_SIZE
            break
          case 2:
            totalOffset += DOUBLE_SIZE + REGULAR_SIZE
            break
          case 3:
            totalOffset += DOUBLE_SIZE + REGULAR_SIZE + REGULAR_SIZE
            break
          default:
            // ignore
            break
        }
      }
      totalOffset += REGULAR_SIZE
      dataItem = { length: getDimensions(index).height, offset: totalOffset, index }
    }
    return dataItem
  }

Это нормально работает в случае вертикальной прокрутки вниз, но когда я двигаюсь вверх, иногда это вызывает два щелчка, чтобы изменить фокус: один для перевода элемента в фокус, а другой - для изменения фокуса и прокрутки всего элемента, который находится в фокусе. Как я могу исправить эту проблему?

Если первый элемент моей первой строки в два раза больше ширины строки под ним, и когда я нажимаю кнопку "вниз", фокус переходит на второй элемент следующей строки, а не на первый. Всегда ли React Native фокусируется? Есть ли способ начать навигацию слева?

Благодарность

0 ответов

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