2016-09-28 2 views
0

Я работаю с RecyclerView некоторое время. Я следую за ленивой загрузкой, поэтому каждый раз показываю 10 данных. Если пользователь прокрутит страницу вниз, перегрузка страницы из TOP! однако, я хочу остаться там, где он был раньше! Итак, я попытался использоватьКак восстановить предыдущее состояние в RecyclerView после загрузки дополнительных данных

recyclerView.scrollToPosition(position); 

Однако это нарушает поток пользовательского интерфейса! Моя вторая попытка заключается в использовании onSaveInstanceState() и onRestoreInstanceState (состояние пучка); Однако это не работает! Моя страница перезагружается до вершины!

Parcelable state = layoutManager.onSaveInstanceState(); 
layoutManager.onRestoreInstanceState(state); 

Я пробовал все другие методы, по-видимому, никто не работает для меня! Любая помощь будет высоко оценена! Заранее спасибо!

ответ

1

Примечание: убедитесь, что вы не инициализируете или не вызываете метод setAdapter() каждый раз после обновления вашего набора данных. Если нет, то

Вам необходимо обновить список своих данных и вызвать notifyDataSetChanged(), который обновит ваш адаптер из существующей позиции.

Предположим, вы сохранили данные в массиве ArrayList mData;

Ваш getItemCount() будет

@Override 
public int getItemCount() { 

if (mData != null && mData.length() > 0) 
    return mData.size(); 

    return 0; 
} 

Теперь создайте еще один метод в адаптер, который вы будете вызываться каждый раз, когда вы будете получать новые данные с сервера. Этот метод будет просто переопределить набор данных и обновит адаптер

private void updateDataSet(ArrayList<String> mData){ 

    this.mData = mData; 
    notifyDataSetChanged(); 

} 
+0

Спасибо @Jai, но это не работает! Страница держит меня в верхней части списка, когда новые данные были добавлены на экран. –

+0

@ibtehaz: Не могли бы вы разместить свой адаптер? – Jai

+0

@ibtehaz: Ваша страница запускается сверху или вы можете видеть одни и те же элементы во время прокрутки? – Jai

0

Это поведение по умолчанию Ресайклер View для переработки/resuse виды. Как и в официальных документах: https://developer.android.com/reference/android/support/v7/widget/RecyclerView.html
Если у вас возникли какие-либо проблемы, связанные с просмотром, сохраните состояние своего вида в List<Object>, как заданный видимый элемент, или нет. И в вашем методе onBindViewHolder в соответствии с позицией покажите/скройте свой вид.

1

Я делал эту функциональность, прежде чем 2 дня назад

Я разделяю мою идею с вами

Сделать

Listview lv; //Assume Find view by Id 
List<Model> models = new ArrayList(); 

сейчас Сделать адаптер и назначить пустые модели

CustomAdapter adapter = new CustomeAdapter(context,models); 
lv.setAdapter(adapter); 

Теперь, когда у вас есть новые данные для загрузки с помощью lazylodaing

сделать это

models.addAll(newModels); //new ModelList 
adapter.notifyDataSetChanged(); 

это так.

+0

Спасибо @MohitTrivedi –

Смежные вопросы