2016-07-01 15 views
0

我有一個RecyclerView,我要像下面如何從一個就是它的內部

總之形象創造的東西改變RecyclerView的元素:我想禁用選中的複選框被激活,當另一個列表被激活。

enter image description here

這是我RecyclerView適配器:

@Override 
public void onBindViewHolder(final MyHolder holder, final int position) { 

    holder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(CompoundButton compoundButton, boolean b) { 
     /*Here I want to disable this on. I need to have a single enabled checkbox.*/ 

      //((CheckBox) holder.itemView.findViewById()).setChecked(false); 

     } 
    }); 
} 

正如我可以禁用選中此上的複選框。 對不起,我的英語...

回答

1

在coustructor方法添加此int變量:

int currentCheckedPosition = -1 ; // hold checked position 

而且在OnBindView()做到這一點:

@Override 
public void onBindViewHolder(final MyHolder holder, final int position) { 
holder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
    @Override 
    public void onCheckedChanged(CompoundButton compoundButton, boolean b) { 
      if(b){ 
       currentCheckedPosition = holder.getAdapterPosition(); 
       holder.checkbox.setChecked(b); 
      } else { 
       currentCheckedPosition = - 1 ; 
      } 
      notifyDataSetChanged(); 
     } 
    }); 

holder.checkBox.setChecked(position == currentCheckedPosition); 
} 
+0

我看到你拒絕了我的編輯。沒關係,但我對你的回答仍有疑問。例如,這條if語句: 'if(currentCheckedPosition!= - 1)'永遠不會到達,因爲currentCheckedPosition正在改變裏面的值。而且,如果在更新currentCheckedPosition後不添加'notifyDatasetChanged()',則仍然可以在先前選擇的單元格上看到該檢查。我錯過了什麼嗎?祝一切順利。 –

+0

你是對的朋友,對不起! –

+1

好的。我重新發布我的編輯,如果你不介意 –

0

不是最完美的解決方案,但你可以做一個CompoundButton變量稱爲currentlyChecked整個適配器。當onCheckedChange被觸發,調用

currentlyChecked.setChecked(false); 

希望這有助於

相關問題