为了避免在添加或删除项时改变RecyclerView的滚动位置,您可以使用以下方法:
在创建RecyclerView时,使用LinearLayoutManager.setStackFromEnd(false)来避免将新项目显示在底部。
LinearLayoutManager layoutManager = new LinearLayoutManager(this); layoutManager.setStackFromEnd(false); recyclerView.setLayoutManager(layoutManager);
在添加或删除项目之前,您可以使用getFirstVisibleItemPosition()和findLastCompletelyVisibleItemPosition()方法来获取RecyclerView的可见范围(即滚动位置),并在操作完成后使用scrollToPositionWithOffset方法来恢复它。例如:
int firstVisibleItemPosition = layoutManager.findFirstVisibleItemPosition(); int lastVisibleItemPosition = layoutManager.findLastCompletelyVisibleItemPosition(); adapter.addItem(); adapter.notifyItemInserted(position); // position is the position of newly added item recyclerView.post(new Runnable() { @Override public void run() { layoutManager.scrollToPositionWithOffset(firstVisibleItemPosition, 0); } });
请注意,如果您在更新RecyclerView滚动位置之前调用notifyItemInserted()或notifyItemRemoved()方法,则可能会导致滚动位置不正确。因此,您应该使用post()方法来稍后更新滚动位置。