5 回答
TA贡献1876条经验 获得超5个赞
最初将其设置为零
lastFirstVisiblePosition = 0;
您可以在滚动条上存储滚动位置并像这样设置滚动位置。
((LinearLayoutManager) rv.getLayoutManager()).scrollToPosition(lastFirstVisiblePosition);
如果这不起作用尝试下面
((LinearLayoutManager) rv.getLayoutManager()).scrollToPositionWithOffset(lastFirstVisiblePosition,0)
TA贡献1818条经验 获得超8个赞
重写 onAttachedToRecyclerView 以获取适配器类中的 RecyclerView 引用
@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
super.onAttachedToRecyclerView(recyclerView);
mRecyclerView = recyclerView;
}
重写 onViewRecycled 以获取 lastVisiblePosition ,当您再次重新加载回收器视图时可以使用它
@Override
public void onViewRecycled(SiteHolder viewHolder) {
lastVisiblePosition = ((GridLayoutManager) mRecyclerView.getLayoutManager()).findLastCompletelyVisibleItemPosition();
}
无论你在哪里重新加载数据(作为 Arraylist 的 setter 或任何方式),首先调用
notifyDataSetChanged();
进而
((GridLayoutManager) mRecyclerView.getLayoutManager()).scrollToPosition(lastVisiblePosition);
这将确保先重新加载数据,然后再滚动
TA贡献1820条经验 获得超9个赞
mAdapter.notifyDataSetChanged(); 将通知您的整个列表,这将使您的列表滚动到顶部位置,因此使用 notifyItemChanged(intposition),它将仅更新该位置,如果您想通知某个范围,请使用 notifyItemRangeChanged(position,size)
TA贡献2065条经验 获得超13个赞
你可以使用这个方法
mAdapter.notifyItemRangeChanged(position, list.size());
当您在适配器列表中添加新元素时,请使用此方法来通知您适配器。它将保留当前位置并在最后一项下方添加所有新元素。
添加回答
举报