Android 实现长按列表item出现菜单-弹窗AlertDialog 上下文菜单ContextMenu的具体使用(附参考代码)

弹窗AlertDialog 上下文菜单ContextMenu这两个结合可以实现长按列表item出现菜单,点击菜单项弹出对话框进行进一步操作。

对话框AlertDialog

AlertDialog是Android中最常用的对话框,可以完成常见的交互操作,如提示、确认、选择等功能。 AlertDialog没有公开的构造函数,必须借助AlertDialog.Builder才能完成参数设置,AlertDialog.Builder的常用方法如下。

  • setIcon:设置标题的图标。 setTitle:设置标题的文本。 setMessage:设置内容的文本。
  • setPositiveButton:设置肯定按钮的信息,包括按钮文本和点击监听器。
  • setNegativeButton:设置否定按钮的信息,包括按钮文本和点击监听器。
  • setNeutralButton:设置中性按钮的信息,包括按钮文本和点击监听器,该方法比较少用。
  • setView:写一个XML文件设置更多样式和控件

通过AlertDialog.Builder设置完参数,还需调用create方法才能生成AlertDialog对象。最后调用
AlertDialog对象的show方法,在页面上弹出提醒对话框

private AlertDialog alertDialog1;


View view1 = View.inflate(root.getContext(),R.layout.activity_alter_dialog_setview, null);
//root.getContext是Fragment中的上下文(View root = inflater.inflate(R.layout.fragment_record, container, false);)


        alertDialog1 = new AlertDialog.Builder(root.getContext())
                .setTitle("修改记录")//标题
                .setView(view1)
                .setIcon(R.mipmap.ic_launcher)//图标
                .setPositiveButton("确定保存(*^▽^*)", new DialogInterface.OnClickListener() {//添加"Yes"按钮
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                         //TODO
                    }
                })
                .create();

alertDialog1.show();

在这里插入图片描述

上下文菜单ContextMenu

弹出上下文菜单的途径有两种:

  1. 默认在某个控件被长按时弹出。通常在onStart函数中加入registerForContextMenu方法为指定控件
    注册上下文菜单,在onStop函数中加入unregisterForContextMenu方法为指定控件注销上下文菜单。

  2. 在除长按事件之外的其他事件中打开上下文菜单。先执行registerForContextMenu方法注册菜单,
    然后执行openContextMenu方法打开菜单,最后执行unregisterForContextMenu方法注销菜单。

实现上下文菜单的功能需要重写以下两种方法。

  • onCreateContextMenu:在此指定菜单列表的XML文件,作为上下文菜单列表项的来源。
  • onContextItemSelected:在此对不同的菜单项做分支处理。
registerForContextMenu(listView);//为ListView注册上下文菜单

    /**
     * 设置菜单列表项
     * @param menu
     * @param v
     * @param menuInfo
     */
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        menu.setHeaderTitle("操作:");
        menu.add(1,1,1,"删除记录");
        menu.add(2,2,2,"修改记录");
    }

    /**
     * 处理不同的菜单项
     * @param item
     * @return
     */
    public boolean onContextItemSelected(MenuItem item) {
        //获取上下文菜单适配器
        AdapterView.AdapterContextMenuInfo cmi=(AdapterView.AdapterContextMenuInfo)item.getMenuInfo();
        //获取被选择的菜单位置
        int posMenu=cmi.position;
        //将菜单项与列表视图的条目相关联
        Nbp_choosen_data =(Nbp_data)myListAdapter.getItem(posMenu);

        switch(item.getItemId()){
            case 1://删除选中项
                //TODO
                break;
            case 2://修改选中项
                //TODO
                break;
            default:
                break;
        }
        return super.onContextItemSelected(item);
    }

menu.add 这个方法里面有四个参数,它们的意义分别为:

第一个int类型的group ID参数,代表的是组概念,你可以将几个菜单项归为一组,以便更好的以组的方式管理你的菜单按钮。 它对应方法int i = item.getGroupId();

第二个int类型的item ID参数,代表的是项目编号。这个参数非常重要,一个item ID对应一个menu中的选项。
在后面使用菜单的时候,就靠这个item ID来判断你使用的是哪个选项。它对应int id = item.getItemId();

第三个int类型的order ID参数,代表的是菜单项的显示顺序。默认是0,表示菜单的显示顺序就是按照add的显示顺序来显示。
如果两个位置数值一样,那么先定义的拍前面。而且,groupid并不影响排列顺序。

第四个String类型的title参数,表示选项中显示的文字。

在这里插入图片描述

菜单menu除了上下文菜单ContextMenu(通过长按事件触发, 对应Windows上的右键菜单)以外,还有选项菜单OptionMenu(通过按菜单 键或点击事件触发,对应Windows上的开始菜单)

可以参考下面这篇blog。

参考:https://blog.csdn.net/xbean1028/article/details/104799163/ 添加上下文菜单内容menu-add方法参数意义 by江山点墨

移动开发丛书·Android Studio开发实战:从零基础到App上线 欧阳燊著

猜你喜欢

转载自blog.csdn.net/weixin_43580841/article/details/107334639