如何在列表视图上实现长点击侦听器

我想在列表视图中添加 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;
}
});
242955 次浏览

我认为上面的代码可以在 LongClick 列表视图上工作,而不是单独的条目。

为什么不使用 registerForContextMenu(listView).and 然后在 OnCreateContextMenu 中获取回调。

对于大多数用例来说,这都是一样的。

您必须在 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.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 文件,那么除了将 setOnItemLongClickListener()设置为 ListView 之外,还要确保将 android:longClickable="true"添加到该布局文件中。

这应该能行

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

下面是上面代码的输出 enter image description here

我尝试了这些答案中的大部分,他们都失败的文本视图启用自动链接,但也必须使用长按在同一个地方!

我定制了一个能用的类。

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 中添加

<ListView android:longClickable="true">

在 java 文件中

lv.setLongClickable(true)

试试这个 setOnItemLongClickListener ()

lv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> adapterView, View view, int pos, long l) {
//final String category = "Position at : "+pos;
final String category = ((TextView) view.findViewById(R.id.textView)).getText().toString();
Toast.makeText(getActivity(),""+category,Toast.LENGTH_LONG).show();
args = new Bundle();
args.putString("category", category);
return false;
}
});

这对于我来说是有效的,并将工作相同的内部适配器类,在 onBindViewHolder()函数列表视图

holder.cardView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
return false;
}
});

如果你想在适配器中完成,你可以简单地这样做:

itemView.setOnLongClickListener(new View.OnLongClickListener()
{
@Override
public boolean onLongClick(View v) {
Toast.makeText(mContext, "Long pressed on item", Toast.LENGTH_SHORT).show();
}
});
    listView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
return false;
}
});

绝对有效。