При определенных условиях я хочу установить определенный элемент в моем навигационном ящике (построенном с помощью RecyclerView) в качестве выбранного с помощью моего скрипта. Для этого я использую следующий код

recyclerView.findViewHolderForPosition(1).itemView.performClick();

Проблема в том, что когда нужный элемент не находится в порте просмотра (скажем, кто-то прокрутил вниз до нижней части ящика Nav), он выдает NullPointerException (я предполагаю, что это ожидаемое поведение, поскольку этот элемент перерабатывается).

Может ли кто-нибудь подсказать, что я могу сделать? Один из способов, о котором я думал, - это автоматическая прокрутка к вершине перед вызовом функции выше, но я не уверен, что это возможно. Любая помощь будет оценена по достоинству.

Ответы (2)

Если я правильно понял, вы хотите установить выбранный элемент RecycleView. Вы можете изменить ваш RecyclerView.Adapter следующим образом:

class YourModel{
   public boolean isSelected;
}


 public class CustomRecycleAdapter extends RecyclerView.Adapter{

   List 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);

Вы правы, что findViewHolderForPosition возвращает null, если держатель вида недоступен (находится вне экрана - переработано). В этом случае можно просто ничего не делать. Вид покажет новый внешний вид, когда пользователь прокрутит его, и в этот момент будет вызвана ваша привязка (до этого момента визуальный вид элемента не имеет значения...)

.

2022 WebDevInsider