带有XML条目的Android ListView不会选择项目

时间:2013-12-05 17:42:49

标签: android android-listview

我有一个带有静态内容的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);

    }
});

我点击“项目”就好了,但既没有选择也没有取消选择。

1 个答案:

答案 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);