2016-11-22 72 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