如何在列表视图上实现长按监听器
我想在我的列表视图中添加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(); } }
- 如何“摇动”Android模拟器中的Android设备,调出开发菜单来debugging我的React Native应用程序
- 在Xamarin中使用本地数据库
- 在Android的ARM EABI v7a系统映像有什么用?
- Android中的SegmentedControl相当于Android
- input时在EditText中清除文本
- FragmentPagerAdapter只存在于Android.Support.V4.App(而不是Android.App)
- 在iOS中显示一条消息,其function与Android中的Toastfunction相同
- Android – 跨多个活动实现LocationListener的最佳方式
- 如何在我的/ sdcard / Android / data / mypackage / files文件夹中获取video的缩略图?