【问题标题】:android - How to update the status multichoice items of alert dialogandroid - 如何更新警报对话框的状态多项选择项
【发布时间】:2013-09-07 00:22:48
【问题描述】:

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

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

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

  3. 在代码中,choice_checked 和choice_checked_dynamic 是布尔数组。choice_checked_dynamic 是choice_checked 的副本。意味着最初这两个数组是相同的。如果您在列表中进行了一些更改并单击“确定”按钮,则更改的数组将被复制到choice_checked_dynamic。默认情况下,警报对话框仅显示更改,因此可以使用 ok 按钮。但是在取消按钮的情况下,意味着如果您做了一些更改然后单击取消按钮然后我想显示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;
}

【问题讨论】:

    标签: android android-alertdialog


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      dialog.show();  
      return null;
      

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

      【讨论】:

        【解决方案3】:

        在上面的代码中,如果你第一次点击按钮,对话框只会使用 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();         
        }
        

        【讨论】:

          猜你喜欢
          • 2012-08-29
          • 2013-04-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-08-28
          • 1970-01-01
          相关资源
          最近更新 更多