安卓 - 如何更新警告对话框的多选项状态

3
在我的应用程序中,如果您点击按钮,我会显示警报对话框。警报对话框包含多项选择和2个按钮(即确定和取消)。最初,我使用数组设置了一些项目(即,在代码choice_checked中)。
  1. 如果您打开警报对话框并进行更改,然后单击确定按钮,则对话框将关闭,再次打开警报对话框,则显示更改(即,这是警报对话框的默认属性)。
  2. 如果您打开警报对话框并进行更改,然后单击取消按钮,则对话框将关闭,再次打开警报对话框,在这种情况下,我只想显示先前的状态(不显示更改)。我尝试过,但没有成功,请问有人可以帮助我吗?
  3. 在代码中,choice_checked和choice_checked_dynamic是布尔数组。choice_checked_dynamic是choice_checked的副本。这意味着最初这两个数组是相同的。如果您更改了列表并单击确定按钮,则更改后的数组将复制到choice_checked_dynamic中。默认情况下,警报对话框仅显示更改,因此对于确定按钮来说很好。但是,在取消按钮的情况下,如果您进行了一些更改,则我想显示choice_checked_dynamic状态(即,我显示了先前的状态)。
我已经尝试过,但没有成功,请问有人可以帮助我吗?
代码:
private OnClickListener bookmark_btnListener = new OnClickListener()

{

    public void onClick(View v)
    {
        try
        {                                   
             showDialog(DIALOG_MULTI_CHOICE);
        }
        catch(Exception ex2)
        {
            System.out.println("back btn error:"+ex2.toString());
        }
    }
};

protected Dialog onCreateDialog(int id) {
    switch (id) { 
    case DIALOG_MULTI_CHOICE:                                        
         bookmark_dialog = new AlertDialog.Builder(this);
         bookmark_dialog.setTitle("Bookmarking for");
         bookmark_dialog.setMultiChoiceItems(choice, choice_checked, new OnMultiChoiceClickListener() {
             public void onClick(DialogInterface dialog, int index, boolean status)
             {                        

             }                  
         });

         bookmark_dialog.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];               
            }
               dialog.dismiss();
           }
         });
         bookmark_dialog.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];              
               }              
               dialog.dismiss();
           }
       });
         return bookmark_dialog.create();         
    }
    return null;
}
3个回答

0

只需使用 show() 方法来显示对话框,而不是使用 create() 方法创建对话框并在最后返回它。

dialog.show();  
return null;

活动不保存对话框的状态,因此无法使用dismiss来关闭它,但按下按钮会自动关闭多选对话框,或者您可以使用deleteDialog(int id)函数来关闭它。


0

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

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) {

}

0
在上面的代码中,问题是将使用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();         
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接