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