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();
}
無論你在哪里重新加載數(shù)據(jù)(作為 Arraylist 的 setter 或任何方式),首先調用
notifyDataSetChanged();
進而
((GridLayoutManager) mRecyclerView.getLayoutManager()).scrollToPosition(lastVisiblePosition);
這將確保先重新加載數(shù)據(jù),然后再滾動

TA貢獻1820條經驗 獲得超9個贊
mAdapter.notifyDataSetChanged();?將通知您的整個列表,這將使您的列表滾動到頂部位置,因此使用?notifyItemChanged(intposition),它將僅更新該位置,如果您想通知某個范圍,請使用?notifyItemRangeChanged(position,size)?

TA貢獻2065條經驗 獲得超14個贊
你可以使用這個方法
mAdapter.notifyItemRangeChanged(position, list.size());
當您在適配器列表中添加新元素時,請使用此方法來通知您適配器。它將保留當前位置并在最后一項下方添加所有新元素。
添加回答
舉報