为什么我的onItemSelectedListener没有在ListView中调用?

时间:2010-03-16 12:41:29

标签: android android-listview listener

我使用的ListView设置如下:

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

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

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中。

3 个答案:

答案 0 :(得分:96)

OnItemSelectedListener侦听列表项选择,而不是列出项目点击次数。

在这种情况下,选择可以看作是使用设备的触控板将焦点移到此项目上。

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

首先,您应该设置ChoiceMode,然后在ListView中设置,因为setOnItemSelectedListenerAdapterView中注册,并且在方法{中回调“,因此不接受所选事件{1}},但是类handleDataChanged()会覆盖此方法,并且永远不会回调AbsListView

enter image description here

您可以在OnItemSelectedListener

中通过此方法获取seletedItem
setOnItemClickListener