簡體   English   中英

滾動到回收站視圖頂部

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM