如何在列表视图上实现长按监听器
我想在我的列表视图中添加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。
希望这会帮助你。
一定要调用'lv.setLongClickable(true);'也是。 – 2013-01-06 05:10:52
这不适合我。但是这样做:'lv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener(){...' – 2013-06-16 03:47:05
somehow adroid:longClickable =“true”是默认的。我使用API 19.所以我根本不需要指定它 – user1592714 2013-11-12 00:21:07
我觉得这上面的代码将在LongClicking列表视图,而不是单个项目的工作。
为什么不使用registerForContextMenu(listView)
。然后在OnCreateContextMenu中获取回调。
对于大多数使用情况,这将工作相同。
或试试这个代码:
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;
}
});
如果您的ListView 行项目是指一个单独的XML文件,一定要另外加android:longClickable="true"
到布局文件设置setOnItemLongClickListener()
您的ListView。
谢谢!这是我的头撞。 – Shaihi 2013-08-22 10:39:24
这应该工作
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();
}
}
请参阅xml是否启用长时间点击? – 2012-01-13 07:04:02
您是否记得在您的类声明中添加“implements OnItemLongClickListener”? – barry 2012-01-13 06:35:51
也许你有一个手势监听器或类似的东西,它捕捉长时间按下并消耗它。 – 2013-01-24 08:57:12