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

时间:2011-12-29 11:00:25

标签: android android-alertdialog

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

  1. 如果打开警报对话框,则进行了一些更改,然后单击“确定”按钮,然后单击对话框,然后再次打开警告对话框,然后显示更改(即警报对话框的此默认属性)。

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

  3. 在代码中,choice_checked和choice_checked_dynamic是布尔数组.choice_checked_dynamic是choice_checked的副本。手段最初这两个数组是相同的。如果您在列表中进行了一些更改并单击“确定”按钮,则更改的数组将复制到choice_checked_dynamic中。默认情况下,警报对话框仅显示更改,因此对于确定按钮是正常的。但是在取消按钮的情况下,意味着如果你做了一些更改然后点击取消按钮然后我想显示choice_checked_dynamic状态(意味着我显示以前的状态)。

  4. 我试过但我没有得到请任何人都可以帮助我。

    代码:

    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 :(得分: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();         
}

答案 1 :(得分:0)

只需使用 show()代替 create()方法来显示对话框,最后不要返回创建的对话框。

dialog.show();  
return null;

活动没有sava状态的对话框因此不能正常工作,但按下按钮会自动关闭multichoise对话框,或者你可以使用deleteDialog(int id)。

答案 2 :(得分: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) {

}