我有一个ListView,我试图使用一个可检查的项目列表。我在ArrayAdaptor中的列表项类上调用toggle()方法,但复选框未在UI中打勾。但是,我可以确认在UI中选择了正确的项目为,并且“isChecked()”状态正确报告 - 只是UI根本不会改变。我需要调用哪些特殊方法来更新用户界面的复选框图形?复选框不会更改UI中的检查状态?
换句话说 - 如何以编程方式告诉UI复选框应显示为“已选中”?看起来这应该是一个非常简单的过程,但是我一直在寻找这些信息时遇到了很多麻烦。
代码如下:
对于在ArrayAdaptor项目数据类:
public class SelectedItemData extends CheckedTextView {
public String _item_name;
public String getItemName()
{
return _item_name;
}
public void setItemName(String in_name)
{
_item_name = in_name;
}
// methods
public SelectedItemData(Context context) {
super(context);
init();
}
public void init()
{
this._item_name = "UNSET";
this.setChecked(false);
}
@Override
public String toString()
{
return _item_name;
}
}
在活动类(位于onCreate方法内):
_selectedItemsListView = (ListView) findViewById(R.id.selected_items_listview);
_selectedItemsListView.setItemsCanFocus(false);
_selectedItemsListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
_selectedItemsListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> listview, View view, int position, long id) {
@SuppressWarnings("unchecked")
ArrayAdapter<SelectedItemData> itemsAdapter = (ArrayAdapter<SelectedItemData>)_selectedItemsListView.getAdapter();
SelectedItemData selectedItem = itemsAdapter.getItem(position);
selectedItem.toggle();
Toast.makeText(view.getContext(), "Item " + selectedItem.getItemName() + " Selected!", Toast.LENGTH_SHORT).show();
Log.d(TAG, "Is Item Checked? " + selectedItem.isChecked());
_selectedItemsListView.setAdapter(itemsAdapter);
}
});
任何指导关于如何使用户界面能够正确显示其中一个项目已被选中/检查会很好。谢谢!
注意:我*是*在其他地方设置适配器,我不认为代码是相关的?所有的项目都正确填充在列表中 - 我的问题是关于如何让复选框显示它已被检查。 – DashRantic