RecycleView可以做到当你滑动到列表的某一位置时在顶部添加数据列表不动的效果吗?准确的说是比如你滑动到第三个item,此时第一个和第二个都被滑动到屏幕外面了,现在在第一个item上面增添一条数据,屏幕内顶部明明是第三个item现在被自动挤成第二个了,可不可以让哪怕他在顶部增加,可是屏幕上显示的还是第三个item在顶端。
可以添加在list添加数据后,不调用adapter的notifyDataSetChanged方法通知RecyclerView更新,如果只是在顶部添加数据的话,可以监听recyclerview滑动到顶后再调用adapter的notifyDataSetChanged更新,就像这样:
rv.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
//recyclerView.canScrollVertically(1)的值表示是否能向上滚动,false表示已经滚动到底部
//recyclerView.canScrollVertically(-1)的值表示是否能向下滚动,false表示已经滚动到顶部
if (!recyclerView.canScrollVertically(-1)){
popStringListAdapter.notifyDataSetChanged();
}
}
});
滑动在顶部可以在添加数据时候,做个判断:
list.add(0,"new one");
if (!rv.canScrollVertically(-1)){
popStringListAdapter.notifyDataSetChanged();
}
用LinkedList替换ArrayList
这样的话,新数据可以在尾部添加而不影响头部的排序
添加数据用notifyItemInsert、notifyItemRangeInserted插入通知,要刷新该条数据之后的item索引,则再调用notifyItemRangeChanged