我有一个带有静态内容的ListView(定义为字符串数组资源,在视图中设置为android:entries
)。
设置choiceMode
似乎什么都不做。选择事件似乎没有触发。如果我从点击处理程序设置一个选定的索引,它就不会生病:如果我试图立即获得所选索引,我得到-1。
XML中的列表定义:
<ListView
android:id="@+id/actions_list"
android:choiceMode="singleChoice"
android:entries="@array/actions_listItems" />
在活动的onCreate
中final ListView list = (ListView) findViewById(R.id.actionRequired_list);
list.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View target, int position, long rowId) {
Log.i("LIST_EVENT", "item selected: pos = " + position + "; id = " + rowId);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
Log.i("LIST_EVENT", "item deselected");
}
});
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long rowId) {
view.setSelected(true);
Log.i("LIST_EVENT", "item clicked: pos = " + position + "; id = " + rowId);
}
});
我点击“项目”就好了,但既没有选择也没有取消选择。
答案 0 :(得分:0)
“选定”并不意味着我的意思。被选中更像是“专注”。我想要的是“检查”。
忘掉setOnItemSelectedListener
,试试这个
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long rowId) {
final int oldSelection = list.getCheckedItemPosition();
list.setItemChecked(position, true);
Log.i("LIST_EVENT", "item clicked: pos = " + position + "; id = " + rowId);
Log.i("LIST_EVENT", "post-item clicked report: old selection = " + oldSelection + "; new = " + list.getCheckedItemPosition());
}
});
注意:
list.setItemChecked(position, true)
不是list.setSelection(position)
list.getCheckedItemPosition()
不是list.getSelectedItemPosition()
为了明确选择选中的项目,我使用了这个而不是设置android:entries
:
final ArrayAdapter<String> aa = new ArrayAdapter<String>(
this,
android.R.layout.simple_list_item_checked,
getResources().getStringArray(R.array.actionRequired_listItems));
list.setAdapter(aa);