ListView不触发setOnLongClickListener,只有setOnItemClickListener。

8
我希望在listView上实现两种点击事件 - 单击和长按。
我已经这样实现了:
this.listViewSub = (ListView) this.findViewById(R.id.listsub);

this.listViewSub.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(final AdapterView parent, final View view, final int position,
                final long id) { ... }    });

        // listen to long click - to share texts
    this.listViewSub.setOnLongClickListener(new OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) { ... } });

但是它没有触发长按事件。有人知道为什么吗?
4个回答

25

你需要启用LongClickable

list.setLongClickable(true);
并且
list.setOnItemLongClickListener(new OnItemLongClickListener() {
        @Override
        public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
                final int arg2, long arg3) {

}
});

谢谢,解决了我的问题 :)另外,你不必通过代码设置setLongClickable,通过XML确定它会更好: android:longClickable="true" - Ofershap
1
setOnItemLongClickListener 的文档说明:“如果此视图不可长按,则它变为可长按。” - Vadim
6
请确保使用 setOnItemLongClickListener,而不是 setOnLongClickListener - tmin

7

@Vadim,您的ListView的适配器是否继承自BaseAdapter? 如果是,则还需要在getView()中设置convertView.setLongClickable(true);


为什么我需要在 getView() 中设置 setLongClickable(true),并在 ListView 的 XML 声明中设置 android:longClickable="true"? - KernelPanic

1
对我而言,我必须在包含我的ListView布局的XML文件中设置android:longClickable="true",才能使项目具有长按功能。

在我看过的许多针对这个问题提出的解决方案中(我已经尝试了所有的方法),这是唯一一个对我有效的。 - Steve B

0

onLongClick会在回调函数消耗了长按事件时返回true,否则返回false。因此,如果该方法处理了事件,请返回true。


我在这个方法里添加了一个断点,但它没有停在那里。看起来它没有触发事件。 - Ofershap

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接