При добавлении данных в FlatList всегда отображается первый дочерний элемент. - PullRequest
5 голосов
/ 21 июня 2019

это наш FlatList, скажем привет:

<FlatList
    data={this.state.dates}
...
/>

мы кормим его следующими датами:

this.state = {
    dates: [
        '21/06/2019',
        '22/06/2019',
        '23/06/2019',
    ]
};

затем, когда изменяется видимая дата (onViewableItemsChanged), еслимы в конечном итоге до первого элемента ( 21/06/2019 ), мы добавляем данные, так что новое состояние становится:

dates: [
        '18/06/2019',
        '19/06/2019',
        '20/06/2019',
        '21/06/2019',
        '22/06/2019',
        '23/06/2019',
]

Проблема:

сразу после того, как мы добавим данные, вместо того, чтобы ЕЩЕ ПОСМОТРЕТЬ 21/06/2019 (это была дата, когда произошло предварительное ожидание), мы теперь видим 19/06/2019.

Это потому, что под капотом 21/06/2019 имел обыкновение быть индексом 0, но после предварительного добавления индекс 0 соответствует 19/06/2019.

Что мы хотим:

Я пытаюсь сделать так, чтобы день оставался таким же после добавления данных.

Пожалуйста, не говорите мне использовать scrollToPosition, потому что это действительно взлом, а не решение.Есть ли хорошее решение этой проблемы?

Спасибо

1 Ответ

1 голос
/ 01 июля 2019

Существует недокументированный реквизит keepVisibleContentPosition на ScrollView, который делает то, что вы хотите, но, к сожалению, он не работает на Android

Я нашел другой обходной путь, сохранив последнее смещение y с помощью onScroll , а также сохранить высоту содержимого до и после добавления новых элементов с помощью onContentSizeChange , рассчитать разницу высоты содержимого и установить новое смещение y на самое последнее смещение y + разность высоты содержимого!

Я также открыл проблему на github , но еще не существует полного решения
Благодаря sgtpepper43 для недокументированного решения iOS

...