2016-09-28 3 views
0

私はRecyclerViewをしばらく使っています。私は遅延ロードに従っているので、毎回10個のデータを表示しています。ユーザーが下にスクロールすると、ページはTOPから再ロードされます。しかし、私はそれが以前の場所にとどまりたいです!だから、私は使用しようとしましたより多くのデータを読み込んだ後、RecyclerViewの前の状態に戻す方法

recyclerView.scrollToPosition(position); 

しかし、これはUIの流れを壊す! 私の2回目の試みは、onSaveInstanceState()とonRestoreInstanceState(バンドル状態)を使用しています。しかし、それは動作しません!私のページがトップに再ロードされています!

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

他のすべての方法を試しましたが、明らかに誰も私のために働いていません! ご協力いただければ幸いです!前もって感謝します!

答えて

1

注:データセットの更新後に毎回setAdapter()メソッドを初期化または呼び出していないことを確認してください。そうでない場合は、

データリストを更新し、アダプタを既存の位置から更新するnotifyDataSetChanged()を呼び出す必要があります。

データをArrayList mDataに保存したとします。

あなたgetItemCount()は今、あなたはサーバから新しいデータを取得するたびに毎回呼ばれます、あなたのアダプタ内の1つのより多くのメソッドを作成

@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

ありがとうございました@才ですが、動作しません。新しいデータが画面に追加されると、ページはリストの先頭に移動し続けます。 –

+0

@ibtehaz:あなたのアダプターを投稿できますか? – Jai

+0

@ibtehaz:あなたのページは上から始まっているか、スクロール中に同じアイテムを繰り返し見ることができますか? – Jai

0

これはビューをリサイクル/再利用するデフォルトの動作Recycler Viewです。公式のドキュメントのとおり: https://developer.android.com/reference/android/support/v7/widget/RecyclerView.html
ビューに関する問題が発生している場合は、List<Object>にビューステートを設定するか、ポジションごとに設定しないように保存してください。そして、あなたのonBindViewHolderの方法では、あなたのビューを表示/非表示にします。

私は2日前

私は

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

今すぐアダプターを作成し、空白のモデルに

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

を割り当てる必ず

で私の考えを共有する前に、この機能を行っている

1

今すぐlazylodaingでロードする新しいデータがある場合

この

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

ザッツそれを行います。

+0

ありがとう@MohitTrivedi –

関連する問題