簡體   English   中英

在RecyclerView android中禁用項目

[英]Disable items in RecyclerView android

我的RecyclerView是帶有復選框的列表,頁面底部是一個提交按鈕。 當我單擊按鈕時,應禁用復選框,但應保留已選中的復選框的狀態。 而且,由於該復選框位於RecyclerView.ViewHolder ,因此如何訪問該復選框? 請幫助。

最好將此屬性作為要建模的項目的屬性。

因此,如果模型項將具有“已啟用”狀態,則可以更改。

public class Model {

   private boolean isEnabled;
   private boolean isChecked;

   public void setEnabled(boolean enabled) { 
      isEnabled = enabled;
   }

   public void setChecked(boolean checked) {
      isChecked = checked;
   }

   public boolean isEnabled() {
      return isEnabled;
   }

   public boolean isChecked() {
      return isChecked;
   }
}

然后,您每次綁定到該屬性時,ViewHolder都會檢查該屬性。 此外,ViewHolder本身將偵聽其處理的視圖上的復選框的更改。

public class ModelViewHolder extends RecyclerView.ViewHolder implements CompoundButton.OnCheckChangeListener {
   private CheckBox checkBox;
   private Model boundItem;

   public ModelViewHolder(View itemView) {
       checkBox = (CheckBox) itemView.findItemById(R.id.checkBoxId);
       checkBox.setOnCheckChangeListener(this);
   }

   public void bind(Model model) {
       boundItem = model;
       getItemView().setEnabled(model.isEnabled());
       checkBox.setChecked(model.isChecked());
   }

   @Override
   public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
       boundItem.setChecked(isChecked);
   }
}

現在,這允許項目狀態在用戶滾動時保持一致(因為RecyclerItem中的View被重新使用)。 它還允許您在啟用/禁用Model項目時更輕松地在項目上使用notifyItemChanged(int position)

將Recyclerview更改為灰色。 在Recyclerview中,僅在執行某些操作時禁用工作。 如果嘗試禁用不執行任何操作,則您有NULL指針異常

您需要將您的項目放在傳遞給適配器的列表中。 如果它是一個自定義適配器,則可以創建一個方法來返回列表,並且代碼將是:

mAdapter.getList().get(4).setEnabled(false); //or equivalent
mAdapter.notifyDataSetChanged(); //or mRecycler.getAdapter().notifyDataSetChanged()

您可以嘗試:

   RecyclerView rv=new RecyclerView(context);
   rv.getChildAt(5).setEnabled(false); // disables the 6th element

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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