[英]Scroll to top in a recycler view
在某些情況下,我想通過腳本在導航抽屜(使用RecyclerView生成 )中設置一個選定的特定項目。 所以我在下面使用代碼
recyclerView.findViewHolderForPosition(1).itemView.performClick();
問題是,當預期的項目不在視口中時(例如有人向下滾動到Nav抽屜的底部),它將給出NullPointerException
(我想這是預期的行為,因為該項目被回收了)。
誰能建議我該怎么辦? 我在想的一種方法是在調用上面的函數之前自動滾動到頂部,但是我不確定是否可行。 任何幫助將不勝感激。
您是正確的,如果視圖持有人不可用,則findViewHolderForPosition
返回null(屏幕外-回收)。 在這種情況下,您什么也做不了。 當用戶將其滾動到視圖中時,該視圖將顯示新外觀,並在此時調用綁定(直到此項目的外觀沒有關系...)
如果我理解正確,則要設置RecycleView的選定項目。 您可以通過以下方式更改RecyclerView.Adapter
:
class YourModel{
public boolean isSelected;
}
public class CustomRecycleAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{
List<YourModel> listData;
// your View Holder
class ViewHolder extends RecyclerView.ViewHolder{
public View rootLayout; // your root item layout
public ContentViewHolder(View itemView) {
// get root layout
}
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
ViewHolder viewHolder = (ViewHolder)holder;
if(listData.get(position).isSelected{
// set selected like this:
viewHolder.rootLayout.setSelected(true);
}else{
viewHolder.rootLayout.setSelected(false);
}
}
public void setSelected(int position, boolean isSelected){
listData.get(position).isSelected = isSelected;
notifyDataSetChanged();
}
}
最后,在您的活動中使用以下代碼:
CustomRecycleAdapter recycleAdapter; // init it
recycleAdapter.setSelected(0, true);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.