ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

android – AlertDialog MultiChoiceItems – 一次只选择2个项目

2019-07-08 17:25:23  阅读:202  来源: 互联网

标签:android android-alertdialog alertdialog


我的警报对话框中有4个复选框:A,B,C和D.我试图获得使其成为A只能用B,C或D选择的行为,因此一次只能选择2个.

是否有解决方案能够实现这种行为?我看过我能通过谷歌找到什么,但我找不到任何东西.我想我将需要使用共享首选项,然后一旦点击B,C和D中的每一个,我可以在SP中存储一个字符串,引用每个B,C,D,然后它可以检查SP中的字符串每次单击一个,如果存在从B,C或D中存储的值之一,则取消选中已勾选的那个复选框(希望这是有意义的),还是可以有更好的解决方案?谢谢

到目前为止我所拥有的:

boolean[] checked = new boolean[] { true, false, false, false
}; //This is defined at the top of my class, so that once the dialog is first opnened, A is selected by default

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.filteroptions, menu);
    super.onCreateOptionsMenu(menu, inflater);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case R.id.filter:

        AlertDialog dialog;

        final CharSequence[] items = { "A", "B", "C", "D" };
        // arraylist to keep the selected items
        final ArrayList<Integer> seletedItems = new ArrayList<Integer>();

        shfObject = getActivity().getSharedPreferences("NAME",
                Context.MODE_PRIVATE);
        final SharedPreferences.Editor shfEditorObject = shfObject.edit();
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setTitle("Filter");



        builder.setMultiChoiceItems(items, checked,
                new DialogInterface.OnMultiChoiceClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog,
                            int indexSelected, boolean isChecked) {

                        if (isChecked) {
                            seletedItems.add(indexSelected);

                            switch (indexSelected) {

                            case 0:
                                shfEditorObject.putString(
                                        "checkbox1Ticked", "Ticked1");

                                shfEditorObject.commit();
                                break;

                            case 1:

                                shfEditorObject.putString(
                                        "checkbox2Ticked", "Ticked2");

                                shfEditorObject.commit();

                                break;

                            case 2:

                                shfEditorObject.putString(
                                        "checkbox3Ticked", "Ticked3");

                                shfEditorObject.commit();

                                break;

                            case 3:

                                shfEditorObject.putString(
                                        "checkbox4Ticked", "Ticked4");

                                shfEditorObject.commit();

                                break;

                            }

                        }

                        else if (seletedItems.contains(indexSelected)) {
                            // Else, if the item is already in the
                            // array, remove it
                            // write your code when user Uchecked the
                            // checkbox

                        }

                    }
                })
                // Set the action buttons
                .setPositiveButton("OK",
                        new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog,
                                    int id) {
                                // Your code when user clicked on OK
                                // You can write the code to save the
                                // selected item here

                            }
                        })
                .setNegativeButton("Cancel",
                        new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog,
                                    int id) {
                                // Your code when user clicked on Cancel

                            }
                        });

        dialog = builder.create();// AlertDialog dialog; create like this
                                    // outside onClick
        dialog.show();

        return true;

    default:
        break;
    }

    return true;
}

解决方法:

您应该在选中每个项目时更新计数器.当它达到最大限制时,您可以禁用其他复选框.

这个问题很好地回答了它 – How to disable checkbox when a limit is reached in android?

标签:android,android-alertdialog,alertdialog
来源: https://codeday.me/bug/20190708/1404395.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有