57

我正在使用这样设置的 ListView:

<ListView android:id="@android:id/list" android:layout_width="fill_parent"
    android:layout_height="fill_parent" android:longClickable="false"
    android:choiceMode="singleChoice">
</ListView>

在我的代码中,我向 ListView 添加了一个 OnItemSelectedListener,如下所示:

getListView().setAdapter(adapter);
getListView().setOnItemSelectedListener(this);

我的 Activity 实现了这样的监听器:

@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
    Log.d("Tag", "ListItemSelected: Parent: " + parent.toString() + " View: "
            + view.toString() + " Position: " + " Id: " + id);
}

我的希望是,当我单击列表中的某些内容时,我会看到此调试输出。但调试输出从未在 LogCat 中显示。

4

3 回答 3

108

OnItemSelectedListener监听列表项选择而不是列表项点击。

在这种情况下,选择可以被视为使用设备的触控板将焦点移到该项目上。

要获得想要的行为,必须使用OnItemClickListener.

于 2010-03-16T12:54:19.993 回答
4

这是因为您碰巧用手指在支持触控的设备上进行测试。在触摸模式下,没有焦点,也没有选择。需要选择的 UI 应该使用不同类型的小部件,例如单选按钮。

于 2016-08-09T23:00:01.087 回答
3

首先,你应该设置ChoiceMode,然后,在ListView中,不会接受选择的事件,因为setOnItemSelectedListener注册在AdapterView,并且在方法中回调handleDataChanged(),但是类AbsListView覆盖了这个方法并且从不回调OnItemSelectedListener

在此处输入图像描述

你可以通过这个方法在setOnItemClickListener

     mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Log.e("TAG", "onItemClick: " + position);
            SparseBooleanArray positions = mListView.getCheckedItemPositions();
            Log.e("TAG", "onItemSelected: " + positions.toString());

        }
    });
于 2016-11-24T02:51:34.483 回答