簡単なチェックボックスリストビューを実装するために、過去数時間チュートリアルとフォーラムの投稿を読んでいます。
リスト(私の場合はマップ)のチェックボックスの状態を維持する必要があることを理解しています(私は信じています)。
確かにとても単純なことですが、bindViewメソッドでチェックボックスがtrueまたはfalseに設定されていません。これがコードです
public void bindView(View view, Context context, Cursor cursor) {
final int rowId = cursor.getInt(cursor.getColumnIndexOrThrow("_id"));
familyText = (TextView)view.findViewById(R.id.contacts_row_family_name);
markedBox = (CheckBox)view.findViewById(R.id.contacts_row_check);
familyText.setText(cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME)));
view.setOnClickListener(new OnClickListener(){
public void onClick(View arg0) {
Log.d("OnClick","Row clicked");
boolean currentlyChecked;
if(checkedState.size() >= rowId){
currentlyChecked = checkedState.get(rowId);
checkedState.put(rowId, !currentlyChecked);
}else{
currentlyChecked = false;
checkedState.put(rowId, !currentlyChecked);
}
markedBox.setChecked(checkedState.get(rowId));
}
});
setProgressBarIndeterminateVisibility(false);
}
これがcheckedStateの宣言です。これは私のアクティビティのクラスメンバーです。
private Map<Integer, Boolean> checkedState = new HashMap<Integer,Boolean>();
私が理解できる限り、行にリスナーが必要です(これは、ログメッセージが正しく出力されるため機能します)が、チェックボックスは変更されません。