实现步骤:
第一步:
registerForContextMenu(lv);//注册长按事件 (这个方法是原生的,不用自己写,lv 就是listView)
第二步:
lv.setOnItemClickListener(this);//注册并让activity 实现这个接口
@Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { GroupNotifyBean.DataBean dataBean = adapter.getItem(position); Intent intent =new Intent(app, AddGroupTipsActivity.class);intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//传递bean对象,要加这个标志 intent.putExtra("dataBean",dataBean); startActivity(intent); }
第三步:
重写onCreateContextMenu方法(安卓自身的)第四步:@Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { GroupNotifyBean.DataBean dataBean = (GroupNotifyBean.DataBean) lv.getItemAtPosition(((AdapterView.AdapterContextMenuInfo) menuInfo).position); getMenuInflater().inflate(R.menu.menu_mail_friend, menu); super.onCreateContextMenu(menu, v, menuInfo); }
重写onContextItemSelected方法(安卓自带的)注意事项:@Override public boolean onContextItemSelected(MenuItem item) { AdapterView.AdapterContextMenuInfo menuInfo = (AdapterView.AdapterContextMenuInfo)item.getMenuInfo(); int index = menuInfo.position; if (item.getItemId() == R.id.action_black) {//拉黑 R.id.action_black是// R.menu.menu_mail_friend里面的
//接口请求 ToastUtil.show(mContext,"拉黑"); } return super.onContextItemSelected(item); }
传递bean对象要加
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 并实现Serializable或者parcelable接口
否则会报下面异常
09-11 11:32:53.211 24320-24320/com.hx.socialapp E/AndroidRuntime: FATAL EXCEPTION: main Process: com.hx.socialapp, PID: 24320 android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want? at android.app.ContextImpl.startActivity(ContextImpl.java:1610) at android.app.ContextImpl.startActivity(ContextImpl.java:1597) at android.content.ContextWrapper.startActivity(ContextWrapper.java:337) at com.hx.socialapp.activity.social.GroupNotifyActivity.onItemClick(GroupNotifyActivity.java:261) at android.widget.AdapterView.performItemClick(AdapterView.java:334) at android.widget.AbsListView.performItemClick(AbsListView.java:1531) at android.widget.AbsListView$PerformClick.run(AbsListView.java:3667) at android.widget.AbsListView$3.run(AbsListView.java:5590) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:145) at android.app.ActivityThread.main(ActivityThread.java:5981) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)
附录: 这个文件R.menu.menu_mail_friend.xml 放到res目录下的新建的menu文件夹下!
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <!--<item--> <!--android:id="@+id/action_beizhu"--> <!--android:orderInCategory="100"--> <!--android:title="备注"/>--> <item android:id="@+id/action_black" android:orderInCategory="100" android:title="拉黑"/> </menu>
第二种实现方式是:
lv.setOnLongClickListener(this);
让activity实现View.OnLongClickListener 接口,重写
方法,也可以实现@Override public boolean onLongClick(View v) { return false; }
本文介绍如何在Android应用中为ListView实现长按上下文菜单功能。通过四个步骤详细讲解了如何注册并处理长按事件,包括使用原生方法、重写特定方法等。此外还提供了注意事项以避免常见错误。
7636

被折叠的 条评论
为什么被折叠?



