AlertDialog.Builder中的setMultiChoiceItems中的事件处理[通俗易懂]

AlertDialog.Builder中的setMultiChoiceItems中的事件处理

大家好,又见面了,我是全栈君。

因为实习项目中涉及到类似于时钟设置闹钟反复时间的原因须要使用对话框的方式呈现。因为DialogFragment眼下还没实验出嵌套Fragment的方法。所以临时先用AlertDialog.Builder中的setMultiChoiceItems取代,因为网上搜索时都仅仅有显示的代码,没有关于点击事件进行操作的演示样例。所以依据项目自己整理了一下

效果图:

AlertDialog.Builder中的setMultiChoiceItems中的事件处理[通俗易懂]

逻辑:用户点击取消则销毁对话框,点击确定会将勾选的星期数存下来。下次再次点击的话之前选中的星期数会自己主动勾选上

        控件.setOnClickListener(//设置控件的点击事件
                new OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        boolean[] isChecked = { false, false, false, false,
                                false, false, false };
                        for (int i = 0; i < DAY_OF_WEEK.length; i++) {
                            if (mSelectedDays.indexOf(DAY_OF_WEEK[i]) != -1) {
                                isChecked[i] = true;  
                            }
                        }//isChecked是一个boolean[],mSelectedDays存放的是用户之前的选择。DAY_OF_WEEK[]则是一个存放星期数的一个常量字符串数组
                        new AlertDialog.Builder(getActivity())
                                .setTitle(“选择时间”)//标题栏
                                .setMultiChoiceItems(//设置多选条目模式的对话框
                                        new String[] { “星期一”, “星期二”, “星期三”,
                                                “星期四”, “星期五”, “星期六”, “星期日” },//选项条
                                        isChecked,//这个參数必须是boolean[]的,不能使Boolean[]的,有几个item就数组长度几个,true为勾选,false则相反
                                        new DialogInterface.OnMultiChoiceClickListener() {//此处的Listener导包的话须要导入DialogInterface包,假设像我一样因为这个类中须要使用到View中的Listener,则能够按我这样的方式加上前缀
                                            @Override
                                            public void onClick(
                                                    DialogInterface dialog,
                                                    int which, boolean isChecked) {
                                                if (isChecked) {//which代表的是被点击的item的标号。从0開始,假设被选中即isChecked==true
                                                    if (mSelectedDays
                                                            .indexOf(DAY_OF_WEEK[which]) == -1) {
                                                        mSelectedDays
                                                                .append(DAY_OF_WEEK[which]);
                                                    }
                                                } else {
                                                    int index = mSelectedDays
                                                            .indexOf(DAY_OF_WEEK[which]);
                                                    if (index != -1) {
                                                        mSelectedDays
                                                                .deleteCharAt(index);
                                                    }
                                                }
                                            }
                                        })
                                .setPositiveButton(“确定”,  //positiveButton即确定button,negativeButton为取消button
                                        new DialogInterface.OnClickListener() {//此对确定button的点击事件进行设置于处理
                                            @Override
                                            public void onClick(
                                                    DialogInterface dialog,
                                                    int which) {
                                                TextView repeatValue = (TextView) getActivity()
                                                        .findViewById(
                                                                R.id.repeat_values);
                                                repeatValue.setText(mSelectedDays);
                                            }
                                        })
                                .setNegativeButton(“取消”,null).show();
                    }
                });
        return repeatFragmentView;
    }
}

尽管是非常基础的知识。可是希望对初学Android的朋友有所帮助~

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115919.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • jar中没有主清单属性啥意思啊_eclipse 找不到或无法加载主类

    jar中没有主清单属性啥意思啊_eclipse 找不到或无法加载主类今天新写的SpringBoot项目打jar包部署的时候遇到一个问题,xxx.jar包中没有主清单属性。如下图所示:主清单属性是jar包中MANIFEST.MF文件中的一个属性,MANIFEST.MF文件位于jar包的META_INF路径下打开MANIFEST.MF文件,里面有如下属性:Manifest-Version:1.0Implementation-Title:com.imoocImple…

    2022年9月4日
    4
  • 基于MATLAB的语音信号处理

    基于MATLAB的语音信号处理基于MATLAB的语音信号处理摘要:语音信号处理是目前发展最为迅速的信息科学研究领域中的一个,是目前极为活跃和热门的研究领域,其研究成果具有重要的学术及应用价值。语音信号处理的研究,对于机器语言、语音识别、语音合成等领域都具有很大的意义。MATLAB软件以其强大的运算能力可以很好的完成对语音信号的处理。通过MATLAB可以对数字化的语音信号进行时频域分析,方便地展现语音信号的时域及频域曲线,并且根…

    2022年5月26日
    35
  • app软件版本号命名规则_文件版本号命名规则

    app软件版本号命名规则_文件版本号命名规则为什么需要规范APP命名?当我们在需求及业务明确后,产品及设计已经做出了对应的文档及UI图,那么进入研发阶段开始编码实现功能,当功能实现的差不多了之后,期间会需要签出不同的包作为展示或测试,不管当前的进度处于什么阶段,签出对应安装包的时候都会对其进行命名并发送给测试人员。一般往往通过命名,就可以大概知道当前签出的包处于哪个版本阶段,Alpha阶段?Beta阶段?R

    2022年9月10日
    0
  • 贴片电阻电容命名及封装[通俗易懂]

    贴片电阻电容命名及封装[通俗易懂]常见的标准零件件主要有以下几种:电阻(R)、排阻(RA或RN)、电感(L)、陶瓷电容(C)、排容(CP)、钽质电容(C)、二极管(D)、晶体管(Q)。一、零件规格:零件规格即零件的外形尺寸,SMT(表面封装技术)发展至今,业界已经形成了一个标准零件系列,各家零件供货商皆是按这一标准制造。标准零件之尺寸规格有英制与公制两种表示方法,参照下面的常见贴片电阻尺寸表(1inch=25.4m…

    2022年8月21日
    5
  • Vue.js 数据绑定语法详解

    Vue.js 数据绑定语法详解

    2021年6月16日
    109
  • SIFT算法的应用–目标识别之Bag-of-words模型

    SIFT算法的应用–目标识别之Bag-of-words模型

    2021年9月6日
    51

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号