android-如何更新警报对话框的状态多选项

android-如何更新警报对话框的状态多选项,android,android-alertdialog,Android,Android Alertdialog,在我的应用程序中,如果单击按钮,我将显示警报对话框。警报对话框由多选项和两个按钮(即“确定”和“取消”)组成。最初,我使用数组设置一些项(即,在代码选择中选中) 如果打开警报对话框,您做了一些更改,然后单击“确定”按钮,然后对话框关闭,再次打开警报对话框,它将显示更改(即警报对话框的此默认属性) 如果您打开警报对话框,您做了一些更改,然后单击“取消”按钮,然后对话框关闭并再次打开警报对话框。在这种情况下,我只想显示以前的状态(不显示更改)。我尝试了,但没有得到任何人的帮助 在代码中,choice

在我的应用程序中,如果单击按钮,我将显示警报对话框。警报对话框由多选项和两个按钮(即“确定”和“取消”)组成。最初,我使用数组设置一些项(即,在代码选择中选中)

  • 如果打开警报对话框,您做了一些更改,然后单击“确定”按钮,然后对话框关闭,再次打开警报对话框,它将显示更改(即警报对话框的此默认属性)

  • 如果您打开警报对话框,您做了一些更改,然后单击“取消”按钮,然后对话框关闭并再次打开警报对话框。在这种情况下,我只想显示以前的状态(不显示更改)。我尝试了,但没有得到任何人的帮助

  • 在代码中,choice_checked和choice_checked_dynamic是布尔数组。choice_checked_dynamic是choice_checked的副本。这意味着最初这两个数组是相同的。如果在列表中做了一些更改并单击“确定”按钮,则更改的数组将复制到选项\u checked\u dynamic中。默认情况下,“警报”对话框仅显示更改,以便可以使用“确定”按钮。但如果是“取消”按钮,则意味着如果您做了一些更改,然后单击“取消”按钮,则我希望显示选项_checked_dynamic status(表示我显示了以前的状态)

  • 我试过了,但是我没有得到任何帮助

    代码:

    private OnClickListener书签\u btnListener=new OnClickListener()
    {
    公共void onClick(视图v)
    {
    尝试
    {                                   
    showDialog(对话框多选项);
    }
    捕获(异常ex2)
    {
    System.out.println(“返回btn错误:+ex2.toString());
    }
    }
    };
    受保护的对话框onCreateDialog(int id){
    开关(id){
    案例对话框\u多选项:
    bookmark\u dialog=新建AlertDialog.Builder(此);
    bookmark_dialog.setTitle(“书签”);
    bookmark_dialog.setMultiChoiceItems(选项,选中选项,新建OnMultiChoiceClickListener()){
    public void onClick(DialogInterface对话框,int索引,布尔状态)
    {                        
    }                  
    });
    bookmark_dialog.setPositiveButton(“确定”,新的DialogInterface.OnClickListener(){
    public void onClick(对话框接口对话框,int whichButton)
    {                   
    
    对于(int i=0;i上述代码中的问题是,如果您第一次点击按钮,则使用onCreateDialog()只创建一次对话框。下次打开对话框时,不会应用任何更改。因此,我不建议在这种情况下使用onCreateDialog()。在这里,我为每次单击按钮创建对话框并显示它

    // Code:
    AlertDialog.Builder bookmark_dialog_obj;
    
    private OnClickListener bookmark_btnListener = new OnClickListener()
    {
    
        public void onClick(View v)
        {
            try
        {                                   
            Bookmark_Dialog(RB_UpcomingRestaurantDetails.this); 
        }
        catch(Exception ex2)
        {
            System.out.println("back btn error:"+ex2.toString());
        }
    }
    
    
    public void Bookmark_Dialog(Context context) 
    {
    
        System.out.println("onCreate Choice_Checked:"+Arrays.toString(choice_checked));                                  
        bookmark_dialog_obj = new AlertDialog.Builder(context);
        bookmark_dialog_obj.setTitle("Bookmarking for");
        bookmark_dialog_obj.setMultiChoiceItems(choice, choice_checked, new OnMultiChoiceClickListener() {
            public void onClick(DialogInterface dialog, int index, boolean status)
            {                     
    
            }                   
        });
    
        bookmark_dialog_obj.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int whichButton) 
            {                      
                for(int i=0;i<choice_checked.length;i++)
                {
                    choice_checked_dynamic[i] = choice_checked[i];               
                }            
            }
        });
        bookmark_dialog_obj.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int whichButton) 
            {   
                for(int i=0;i<choice_checked_dynamic.length;i++)
                {
                    choice_checked[i] = choice_checked_dynamic[i];              
                }      
                System.out.println("onCreate Cancel Choice_Checked:"+Arrays.toString(choice_checked));  
            }
        });
        bookmark_dialog_obj.show();         
    }
    
    //代码:
    AlertDialog.Builder书签对话框对象;
    私有OnClickListener书签\u btnListener=new OnClickListener()
    {
    公共void onClick(视图v)
    {
    尝试
    {                                   
    书签对话框(RB\u UpcomingRestaurantDetails.this);
    }
    捕获(异常ex2)
    {
    System.out.println(“返回btn错误:+ex2.toString());
    }
    }
    “公用无效书签”对话框(上下文)
    {
    System.out.println(“onCreate Choice_Checked:+Arrays.toString(Choice_Checked));
    bookmark\u dialog\u obj=新建AlertDialog.Builder(上下文);
    书签对话框对象设置标题(“书签”);
    bookmark\u dialog\u obj.setMultiChoiceItems(选项,选项已选中,新的OnMultiChoiceClickListener(){
    public void onClick(DialogInterface对话框,int索引,布尔状态)
    {                     
    }                   
    });
    bookmark_dialog_obj.setPositiveButton(“确定”,新的DialogInterface.OnClickListener(){
    public void onClick(对话框接口对话框,int whichButton)
    {                      
    对于(int i=0;i只需使用show()而不是create()methode来显示对话框,并且在结束时不返回created dialog

    dialog.show();  
    return null;
    

    “活动”不保存对话框状态,因此“关闭”不起作用,但按“关闭多选项对话框”按钮可自行关闭对话框,或者您可以使用deleteDialog(int id)。

    我认为以下方法将满足您的要求

    protected void showMultipleChoiceItems(final String[] items,
            final boolean[] selections, String title,
            boolean cancelButtonDisabled) {
    
        Builder alertDialogBuilder = new Builder(this);
        alertDialogBuilder.setTitle(title);
    
        alertDialogBuilder.setMultiChoiceItems(items, selections,
                new OnMultiChoiceClickListener() {
    
                    @Override
                    public void onClick(DialogInterface dialog, int which,
                            boolean isChecked) {
                        selections[which] = isChecked;
    
                    }
                });
    
        alertDialogBuilder.setNeutralButton(
                "OK", new OnClickListener() {
    
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
    
                    }
                });
    
        if (cancelButtonDisabled)
            alertDialogBuilder.setCancelable(false);
        else
            alertDialogBuilder.setNegativeButton(
                    "Cancel", null);
    
        final AlertDialog alertDialog = alertDialogBuilder.create();
        alertDialog.show();
    
        final Button btnOk = alertDialog.getButton(AlertDialog.BUTTON_NEUTRAL);
        btnOk.setOnClickListener(new View.OnClickListener() {
    
            @Override
            public void onClick(View v) {
    
                alertDialog.dismiss();
                onMultiSelect(items, selections);               
    
            }
        });
    }
    
    // Override this method in the activity to define action on making multiple
    // selections
    public void onMultiSelect(String[] items, boolean[] selections) {
    
    }
    
    protected void showMultipleChoiceItems(final String[] items,
            final boolean[] selections, String title,
            boolean cancelButtonDisabled) {
    
        Builder alertDialogBuilder = new Builder(this);
        alertDialogBuilder.setTitle(title);
    
        alertDialogBuilder.setMultiChoiceItems(items, selections,
                new OnMultiChoiceClickListener() {
    
                    @Override
                    public void onClick(DialogInterface dialog, int which,
                            boolean isChecked) {
                        selections[which] = isChecked;
    
                    }
                });
    
        alertDialogBuilder.setNeutralButton(
                "OK", new OnClickListener() {
    
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
    
                    }
                });
    
        if (cancelButtonDisabled)
            alertDialogBuilder.setCancelable(false);
        else
            alertDialogBuilder.setNegativeButton(
                    "Cancel", null);
    
        final AlertDialog alertDialog = alertDialogBuilder.create();
        alertDialog.show();
    
        final Button btnOk = alertDialog.getButton(AlertDialog.BUTTON_NEUTRAL);
        btnOk.setOnClickListener(new View.OnClickListener() {
    
            @Override
            public void onClick(View v) {
    
                alertDialog.dismiss();
                onMultiSelect(items, selections);               
    
            }
        });
    }
    
    // Override this method in the activity to define action on making multiple
    // selections
    public void onMultiSelect(String[] items, boolean[] selections) {
    
    }