2016-11-22 59 views
0

在我簡單的adapater,我想管理項目上的複選框。Android複選框狀態不要改變狀態後點擊一下

當我上選中複選框,再次單擊和狀態將再次檢查狀態的該複選框後未選中不改變

的logcat:

E/checkedState: false 
E/checkBoxStates: {09122331743=true} 
E/checkedState: true 
E/checkBoxStates: {09122331743=false} 
E/checkedState: true 
E/checkBoxStates: {09122331743=false} 
E/checkedState: true 
E/checkBoxStates: {09122331743=false} 
E/checkedState: true 
E/checkBoxStates: {09122331743=false} 
E/checkedState: true 
E/checkBoxStates: {09122331743=false} 
E/checkedState: true 
E/checkBoxStates: {09122331743=false} 

我的代碼是:

public void onBindViewHolder(final CustomContactsViewHolder holder, final int position) { 
    ... 
    Boolean checkedState = checkBoxStates.get(list.get(position).getMobileNumber()); 
    holder.select_contact.setChecked(checkedState == null ? false : checkedState); 
    holder.select_contact.setTag(position); 
    holder.select_contact.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      onChange((Integer) v.getTag()); 
     } 
    }); 
} 

private void onChange(int position) { 
    final UserPhoneContacts item = list.get(position); 
    if (item == null) { 
     return; 
    } 

    boolean checkedState = checkBoxStates.get(list.get(position).getMobileNumber()) == null ? false : true; 
    Log.e("checkedState ", checkedState + ""); 

    checkBoxStates.put(item.getMobileNumber(), !checkedState); 
    Log.e("checkBoxStates ", checkBoxStates.toString()); 

    notifyDataSetChanged(); 
} 

點擊複選框後,狀態將被檢查,點擊後如果狀態未被選中,我不能在點擊後改變狀態,

單擊 - >檢查,點擊 - >選中,點擊 - >選中,點擊 - >選中,點擊 - >選中

我怎樣才能解決這個問題呢?

回答

0

您可以嘗試使用holder.select_contact.setOnCheckedChangeListener()代替onClickListener。

+0

在每個滾動列表上調用'setOnCheckedChangeListener' –

+0

然後我建議重新設計你的listview以使用listview.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE)這是更好的方式來處理listview中的檢查,你不必使用這個map。相反,您將能夠使用包含選中項目的SparseBooleanArray。 – Raphau

相關問題