2016-03-03 56 views
1

我的RecyclerView是一個帶有複選框的列表,在頁面的底部是一個提交按鈕。當我點擊按鈕時,應該禁用複選框,但已經檢查過的那些框的狀態應該保留。還有,如何訪問複選框,因爲它位於RecyclerView.ViewHolder?請幫助。在RecyclerView中禁用項目android

回答

-2

你可以試試:

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

這是更好的有這個作爲你正在製作的項目的屬性。

所以,如果模型項目將有一個「啓用」狀態,你可以改變。

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本身將監聽它處理的View上的複選框的更改。現在

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視圖被再次使用)。它還允許您在啓用/禁用模型項目時更容易地在項目上使用notifyItemChanged(int position)

+0

有沒有什麼辦法,我訪問片段類ViewHolder的複選框? – fmpsagara

+0

技術上是,但你爲什麼要?該複選框不像數值那麼重要。 – DeeV

+0

重要的是要知道視圖(複選框)是暫時的。只有屏幕上可以看到的數量(加上一兩個)。如果您有一百個項目,那麼可能只有10個複選框。如果你想知道物品99的價值,你將無法得到它。 – DeeV

0

您需要在傳遞給適配器的列表中獲取您的項目。如果它是一個自定義適配器可以使一個方法來回報您的列表,並代碼將是:

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