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
的文档说“如果这个视图不能长点击,它就变成长点击了。”
确保使用setOnItemLongClickListener
,NOT 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 触发