【问题标题】:Why is my onItemSelectedListener not called in a ListView?为什么我的 onItemSelectedListener 没有在 ListView 中调用?
【发布时间】:2011-01-28 02:25:27
【问题描述】:

我正在使用这样设置的 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 中。

【问题讨论】:

    标签: android android-listview listener


    【解决方案1】:

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

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

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

    【讨论】:

    • 我实现了你的方法,但有一些问题。列表选择器正在消失。
    • 尝试将这些属性添加到您的列表视图
    • 这看起来更像是一种解决方法而不是修复。 Selection 事件未触发。
    • 看起来确实如此。我正在调用 setSelection() ,即使这样也不会触发它。 :|
    【解决方案2】:

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

    【讨论】:

    • 实际上,接受的答案有效,但这是真正的原因。
    • 感谢您链接到该博客文章。我从来不知道触摸屏上不存在“选择”。或者更确切地说,“选择”并不意味着我认为它在这种情况下的含义。
    • 这里违反直觉的部分原因是 ListView 提供了“单选”模式,就好像它是一个广播组,但并不直接提供广播组所期望的功能,例如收听因为选择改变。我认为这就是为什么人们认为这里的“选择”意味着“选择”。
    【解决方案3】:

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

    setOnItemClickListener中可以通过这个方法获取到seletedItem

         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());
    
            }
        });
    

    【讨论】:

      猜你喜欢
      • 2017-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-30
      • 1970-01-01
      • 2014-02-26
      • 2018-11-23
      • 2012-01-30
      相关资源
      最近更新 更多