CheckedTextView があり、次のクリックまでチェックボックスが更新されません。
レイアウトに listView とボタンがあるため、私のアクティビティは ListActivity ではなく Activity を拡張しています。
ListView ItemClickListener を次のように設定しています。問題は、別の項目をクリックするまでチェックボックスが「チェック済み」として表示されないことです。行 3 をクリックしてから、行 4 と行 3 のハイライトをクリックします。行 10 をクリックすると、行 4 が最終的にハイライトされます。「ハイライト」とは、チェックボックスが緑色に変わることを意味します。
チェックボックスを強制的に再描画/更新するためにどのメソッドを呼び出す必要があるのか わかりません。cbview.refreshDrawableState(); を呼び出してみました。および cbview.getCheckMarkDrawable().invalidateSelf(); setChecked の後ですが、何もしていないようです。
listView
.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
CheckedTextView cbview = (CheckedTextView)view;
boolean checked = cbview.isChecked();
cbview.setChecked(!checked);
Log.d("Test", "clicked:" + position + " : " + id);
}
});
更新: 回答:
アダプターを最終的にする必要がありました:
final ArrayAdapter<MyOption> adapter = new ArrayAdapter<MyOption>(this,
android.R.layout.simple_list_item_checked, options);
次に、onItemClick で adapter.notifyDataSetChanged() を呼び出します。
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
CheckedTextView cbview = (CheckedTextView)view;
boolean checked = cbview.isChecked();
cbview.setChecked(!checked);
Log.d("Test", "clicked:" + position + " : " + id + ":" + cbview.isChecked());
adapter.notifyDataSetChanged();
}