2017-04-12 67 views
1

我有一個RecyclerView,我想添加新項目的頂部,但我不希望RecyclerView滾動其內容。我希望用戶在添加新項目之前查看相同的項目Android RecyclerView添加項目頂部沒有回收查看滾動(如Instagram)

我試過,但它並不能很好地工作:

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

您可以使用notifyItemRangeInserted方法從RecyclerView.Adapter而不是notifyDataSetChanged方法,將項目插入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

我有一個類似的問題,我設法解決它。

我使用了一個列表,並在後臺線程中添加了數據在這個列表的末尾。 但在RecyclerView中,我以相反的順序顯示數據。爲此,我對我的適配器中的項目索引進行了反轉(如下所示:invertedPosition = listSize - 1 - position)。

而在這種情況下,我遇到了與您所描述的完全相同的問題。

爲了解決這個問題,我做了兩項修改: 1)擺脫適配器中位置的反轉; 2)在LinearLayoutManager中打開reverseLayout選項(通過setReverseLayout(true)調用)

而且,瞧,一切正常。

希望它可以幫助你。

相關問題