Реагировать на проблему навигации по встроенному плоскому списку
Я использую плоский список в качестве корневого контейнера для прокрутки. 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 фокусируется? Есть ли способ начать навигацию слева?
Благодарность