我有一个 CheckedTextView 并且复选框在下次单击之前不会刷新。
我的活动是扩展 Activity 而不是 ListActivity 因为我在布局中有一个 listView 和按钮。
我将 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();
}