ListView 不会触发 setOnLongClickListener,只会触发 setOnItemClickListener

Posted

技术标签:

【中文标题】ListView 不会触发 setOnLongClickListener,只会触发 setOnItemClickListener【英文标题】:ListView doesnt fire setOnLongClickListener, only setOnItemClickListener 【发布时间】:2011-09-30 06:02:31 【问题描述】:

我希望对 listView 进行两种点击 - onClick 和 LongClick。

我是这样实现的:

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)  ...  );

但它不会触发长按。 有人知道为什么吗?

【问题讨论】:

【参考方案1】:

您必须启用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" setOnItemLongClickListener 的文档说“如果这个视图不能长点击,它就变成长点击了。” 确保使用setOnItemLongClickListenerNOT setOnLongClickListener【参考方案2】:

@Vadim,您的列表视图的适配器是从 BaseAdapter 扩展而来的吗?如果是,那么还需要设置convertView.setLongClickable(true);在 getView() 中。

【讨论】:

【参考方案3】:

对我来说,我必须在包含我的 ListView row 布局(不是 ListView 布局)的 XML 文件中设置 android:longClickable="true" 以使项目可以长按。

【讨论】:

在我为这个问题看到的许多建议的解决方案中(并且我已经尝试了所有),这是唯一一个对我有用的解决方案。【参考方案4】:

onLongClick 如果回调消耗了长按,则返回 true,否则返回 false。所以如果事件被这个方法处理,则返回true。

【讨论】:

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

以上是关于ListView 不会触发 setOnLongClickListener,只会触发 setOnItemClickListener的主要内容,如果未能解决你的问题,请参考以下文章

放置在 Listview 上时,Android Searchview 不会触发

单元格中带有按钮的 Xamarin Telerik ListView - 按钮的单击事件不会触发

点击事件上的 jQuery Mobile listview 小部件不会为 Mobile 触发

当存在基于触发器隐藏显示元素的复杂数据模板时,我的 ListView 或 ListBox 控件大小不会缩小?

触发TreeView AfterSelect事件多次

android listview上下滑动时为啥不触发点击事件