2017-04-12 55 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)调用)

而且,瞧,一切正常。

希望它可以帮助你。

相关问题