2016-02-12 2 views
6

Можно ли добавлять элементы к Регенерации ListView для события onTopReached, аналогично тому, как одно добавляет элементы на событие onEndReached? В настоящее время, когда я добавляю строки в список, ListView прокручивается вверх.React Native ListView: Prepend Items

Вариант использования: У меня есть приложение с фидером, с которым пользователь может прокручивать вниз. Когда вы переходите от корма, а затем возвращаетесь к нему, я хочу показать последний увиденный ряд наверху. Затем пользователь должен иметь возможность прокручивать либо вверх, чтобы видеть предыдущие строки, которые он прокрутил, и, конечно, загружать новые строки. Предполагая, что я уже вынес ListView, начиная с последней строки видно надуманный пример будет выглядеть примерно так:

_onTopReached() { 
    this._unshiftRows(); 
    }, 

    _unshiftRows() { 
    var list = this.props.list; // The entire list 
    var lastSeenRowIndex = this.props.lastSeenRowIndex; 
    var prevRows = list.slice(0, i); 
    this._rows = prevRows.concat(this._rows); 
    this.setState({ 
     dataSource: this.state.dataSource.cloneWithRows(this._rows) 
    }); 
    }, 

В приведенном выше примере я просто предваряя первую часть списка уже оказал последний часть с _onTopReached стрельба сразу, потому что я уже на вершине. Однако это приводит к тому, что ListView повторно отображает первую строку в верхней части экрана, а не сохраняет предыдущую позицию.

Альтернативой является сохранение y смещения последней видимой строки и переход к списку ListView в эту позицию. Тем не менее, этот метод требует, чтобы каждая строка до текущей была отображена, что занимает много времени. Я также не смог получить правильное смещение с scrollWithoutAnimationTo или установив contentOffSet. Однако он прокручивается до правильной позиции, если я использую scrollTo или устанавливаю тайм-аут перед вызовом scrollWithoutAnimationTo и допускаю, чтобы первые строки отображались в среднем времени. Но это не очень приятно.

Вся помощь была бы очень признательна. Благодаря!

+0

Я люблю реагировать на родной язык, но ListView Мне также очень трудно получить (справедливо) простые вещи, как это хорошо работает .. удачи! –

+0

Спасибо Бен. ListView был источником большого разочарования для меня тоже. –

+0

Эй, ты когда-нибудь мог это понять? Я смог заставить его перейти к соответствующей позиции, но на мгновение показывает новый контент, который расстраивает. – chapinkapa

ответ

0

Вы должны использовать FlatList

Try добавления новых элементов в источнике данных и использовать метод «scrolltoindex».

FlatList

scrollToIndex (PARAMS: объект) Свитки к пункту по указанному индексу таким образом, что он расположен в видимой области таким образом, что viewPosition 0 помещает его в верхней части, 1 в нижней части, и 0,5 с центром в середине. viewOffset - фиксированное количество пикселей для смещения конечной целевой позиции.