zoukankan      html  css  js  c++  java
  • Android 弹窗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上线  欧阳燊著

  • 相关阅读:
    图片上传记得要讲中文的重命名
    hihoCoder #1471 拥堵的城市
    搜狗拼音输入法的快捷键和其他应用快捷键冲突
    Codeforces #765D
    训练记录
    hihoCoder 1367 等式填空
    hihoCoder #1073 光棍节
    计算几何 I. 极角
    hihoCoder #1065 全图传送
    树的点分治专题
  • 原文地址:https://www.cnblogs.com/XIEjm/p/13292752.html
Copyright © 2011-2022 走看看