2017-04-12 12 views
1

私はRecyclerViewを持っています。新しいアイテムを追加したいのですが、RecyclerViewでそのコンテンツをスクロールしたくありません。新しい商品が追加される前に、同じ商品をに追加する前に、と同じ商品を見てほしい。Android RecyclerViewリサイクルビューのスクロールなしのアイテムをトップに追加

私はこれを試してみましたが、それは非常にうまく機能しません:

index = ((LinearLayoutManager)mLayoutManager).findFirstVisibleItemPosition() + response.items.size(); 
View v = ((RecyclerView)mListView).getChildAt(0); 
top = (v == null) ? 0 : v.getTop(); 

// Insert new datas.. 
... 

// Notify my adapter 
myAdapter.notifyDataSetChanged(); 

// Stay on the same previous position 
((LinearLayoutManager)mLayoutManager).scrollToPositionWithOffset(index, top); 

私は何をしたいこと(Instagramのアプリのように)先頭に、古いコメントはユーザーがスクロールをロードすることです。

はあなたに非常に多くのみんなありがとう!

答えて

0

notifyDataSetChangedメソッドの代わりにRecyclerView.AdapterメソッドからnotifyItemRangeInsertedメソッドを使用して、recyclerViewの上部にアイテムを挿入することができます。

notifyItemRangeInserted(int positionStart, int itemCount) 

あなたがrecyclerViewの上に項目を追加しようとしているとして、あなたのpositionStartは0になり、ITEMCOUNT個はあなたがrecyclerViewの上に追加されているアイテムの数です。

+0

ありがとうございましたSifat、しかし効果はありません。 – anthony

+0

DiffUtilを試しましたか? https://medium.com/@iammert/using-diffutil-in-android-recyclerview-bdca8e4fbb00 – CodeCameo

+0

'notifyItemRangeInserted'を使用しているときは、これを使う必要はありません。'((LinearLayoutManager)mLayoutManager).scrollToPositionWithOffset (index、top); ' – CodeCameo

0

私は同様の問題があったと私はそれを解決するために管理。

Iは、リストを使用し、バックグラウンドスレッドでこのリストの最後にデータを追加しました。 しかし、RecyclerViewでは逆の順序でデータを表示しました。この目的のために、私はアダプタのアイテムのインデックスを反転させました(これは:invertedPosition = listSize - 1 - position)。

この場合、私は説明したような問題がありました。

私は2つの変更を加えました: 1)私のアダプターでの位置の逆転を取り除きます。 2)LinearLayoutManagerのreverseLayoutオプションを(setReverseLayout(true)呼び出しによって)有効にしました。

そして、すべてが正常に機能しました。

は、それはあまりにもあなたのお役に立てば幸いです。

関連する問題