2016-11-22 7 views
0

私の単純なアダプターでは、アイテムのチェックボックスを管理したいと思っています。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

onClickListenerの代わりにholder.select_contact.setOnCheckedChangeListener()を使用できます。

+0

'すべてのスクロールリスト –

+0

に呼ばsetOnCheckedChangeListener'は、その後、私は、これはリストビューにチェックを処理するためのより良い方法であり、あなたはこのマップを使用する必要はありませんlistview.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE)を使用するように、リストビューを再設計することをお勧めします。代わりに、チェック項目を含むSparseBooleanArrayを使用することができます。 – Raphau

関連する問題