2015-07-21 106 views
0

recyclerview有沒有一種方法,使RecyclerView對號的ListView?我看到的大部分示例都沒有類似複選標記的功能。當用戶點擊列表中的某個項目時,他們會突出顯示該行,這不是我所需要的行爲。請提出任何建議?由於添加複選標記到安卓

+0

複選框的複選標記? – Raghunandan

+0

對於遲迴復@Raghunandan感到抱歉。是的含義複選框 – user3137376

+0

除了使用recyclerview之外,它與listview相同。 – Raghunandan

回答

1

我會做這樣的:

首先,有您的適配器SparseBooleanArray您在構造函數初始化。 SparseBooleanArrays將整數映射到布爾值,以便您可以知道哪個視圖已被選中,哪個沒有。

public class RecyclerAdapter extends  RecyclerView.Adapter<RecyclerAdapter.DataViewHolder> { 
    private SparseBooleanArray selectedItems; 
    public RecyclerAdapter(Context context, List<Data> dataList){ 
     selectedItems = new SparseBooleanArray(); 
    } 

的ViewHolder實現ClickListener:

public class DataViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{ 

     public DataViewHolder(View itemView) { 
      itemView.setOnClickListener(this); 
     } 

     @Override 
     public void onClick(View v) { 
      // the condition below returns false if the item isn't in the array. 
      if (selectedItems.get(getPosition(), false)) { 
       //if it is in the array we delete it. So clicking a second time on an item will uncheck it. 
       selectedItems.delete(getPosition()); 
       ((CheckBox)v.findViewById(R.id.checkbox)).setChecked(selectedItems.get(position, false)); 
      } 
      else { 
       selectedItems.put(getPosition(), true); 
       // here get a ref to the view checkbox and *check* it 
       ((CheckBox)viewHolder.itemView.findViewById(R.id.checkbox)).setChecked(true); 
      } 
     } 
    } 

在這一點上,你將有一個選中的複選框倍數項目在recyclerview因爲觀點被回收。爲了防止這一點,只有你想進行檢查更改onBindViewHolder方法,因此檢查或在綁定時取消選中的複選框的複選框:

@Override 
    public void onBindViewHolder(DataViewHolder viewHolder, int position) { 
     ((CheckBox)viewHolder.itemView.findViewById(R.id.checkbox)).setChecked(selectedItems.get(position, false)); 
    } 

我沒有測試,但我已經幾乎相同的代碼和有用。如果你有問題,請告訴我。