如何在列表视图上实现长按监听器

我想在我的列表视图中添加OnLongClickListener 。 每当用户长按列表中的项目,应该执行一些操作,但是我的代码不能捕获这个监听器。 请让我知道我要去哪里错了。 类似的代码很适合setOnItemClickListener

这里是代码:

 listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { public boolean onItemLongClick(AdapterView<?> arg0, View v, int index, long arg3) { // TODO Auto-generated method stub Log.d("in onLongClick"); String str=listView.getItemAtPosition(index).toString(); Log.d("long click : " +str); return true; } }); 

你必须在ListView中设置setOnItemLongClickListener()

 lv.setOnItemLongClickListener(new OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int pos, long id) { // TODO Auto-generated method stub Log.v("long clicked","pos: " + pos); return true; } }); 

列表中每个项目的XML(如果使用自定义XML),也必须具有android:longClickable="true" (或者您可以使用便捷方法lv.setLongClickable(true); )。 这样你可以有一个列表只有一些项目响应longclick。

希望这会帮助你。

如果您的ListView 项引用了单独的XML文件,除了将setOnItemLongClickListener()设置为您的ListView之外,请务必将android:longClickable="true"到该布局文件。

或者试试这个代码:

 listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { public boolean onItemLongClick(AdapterView<?> arg0, View v, int index, long arg3) { Toast.makeText(list.this,myList.getItemAtPosition(index).toString(), Toast.LENGTH_LONG).show(); return false; } }); 

我认为上面的代码将工作在LongViewing的列表视图,而不是单个项目。

为什么不使用registerForContextMenu(listView) 。 然后在OnCreateContextMenu中获取callback。

对于大多数使用情况,这将工作相同。

这应该工作

 ListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int pos, long id) { // TODO Auto-generated method stub Toast.makeText(getContext(), "long clicked, "+"pos: " + pos, Toast.LENGTH_LONG).show(); return true; } }); 

也不要忘记在你的xml android:longClickable="true"或者如果你有一个自定义的视图添加这个到你的自定义视图类youCustomView.setLongClickable(true);

这里是上面代码的输出 在这里输入图像描述

我尝试了大多数这些答案,他们都失败了自动链接启用的TextViews,但也必须在同一个地方使用长按!

我做了一个自定义的类。

 public class TextViewLinkLongPressUrl extends TextView { private boolean isLongClick = false; public TextViewLinkLongPressUrl(Context context) { super(context); } public TextViewLinkLongPressUrl(Context context, AttributeSet attrs) { super(context, attrs); } public TextViewLinkLongPressUrl(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override public void setText(CharSequence text, BufferType type) { super.setText(text, type); } @Override public boolean onTouchEvent(MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_UP && isLongClick) { isLongClick = false; return false; } if (event.getAction() == MotionEvent.ACTION_UP) { isLongClick = false; } if (event.getAction() == MotionEvent.ACTION_DOWN) { isLongClick = false; } return super.onTouchEvent(event); } @Override public boolean performLongClick() { isLongClick = true; return super.performLongClick(); } }