用复选框实现对话框 [英] Implementing Dialog box with checkboxes

查看:165
本文介绍了用复选框实现对话框的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的对话框

public class CustomDialogClass extends Dialog implements
 android.view.View.OnClickListener {

     public Activity c;
     public Dialog d;
     public Button no;
     CheckBox yes;
     boolean p;
     public CustomDialogClass(Activity a) {
         super(a);
         // TODO Auto-generated constructor stub
         this.c = a;
     }

     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         requestWindowFeature(Window.FEATURE_NO_TITLE);
         setContentView(R.layout.custom_dialog);
         yes = (CheckBox) findViewById(R.id.checkBox1);
         no = (Button) findViewById(R.id.btn_no);
         no.setOnClickListener(this);
         yes.setChecked(false);
         yes.setOnClickListener(this);
     }

     @Override
     public void onClick(View v) {
         switch (v.getId()) {
         case R.id.checkBox1:
             yes.setChecked(true);
             break;
         case R.id.btn_no:
             dismiss();
             break;
         default:
             break;
         }
     }
 }

现在,我打开对话框并选中该复选框,单击按钮并关闭该对话框。但是当我再次打开它时,复选框再次被取消选中。我应该怎么办?

Now, I open the dialog and check the checkbox, click on button and dismiss the dialog. But When I open it again, the checkbox is again unchecked. what should i do?

推荐答案

不再推荐您使用对话框的方式!您应该考虑使用 DialogFragment

The way you are using your dialog is not recommended anymore! You should consider using a DialogFragment.

为什么您丢失检查状态的原因是因为当您再次打开该对话框时会重新创建该对话框。

The problem why you are loosing your checked state is because the dialog is recreated when you open it again.

请参阅DialogFragment方法的这个示例 http://developer.android.com/reference/android/app/DialogFragment.html 。您将看到可以将参数传递给对话框。

See this example of the DialogFragment approach http://developer.android.com/reference/android/app/DialogFragment.html. You will see that you can pass arguments to the dialog.

对于一个解决方案,我建议当您关闭对话框时,将选定的值传回主机活动。当对话框应重新打开时,您只需将参数传递到对话框,以便对话框设置其默认选择。

For a solution I recommend that when you close the dialog you pass the selected value back to the hosting activity... when the dialog should be reopenned you just pass the arguments to the dialog so that the dialog sets its default selection.

编辑: p>


  1. 由于您想要显示复选框,我将采用
    示例代码从
    http://developer.android.com/guide/topics/ui/dialogs.html #AddingAList
    复选框。使用
    AlertDialog.Builder仍然很方便。

  1. Since you would like to display checkboxes I will take and adapt the example code from http://developer.android.com/guide/topics/ui/dialogs.html#AddingAList for checkboxes. It's still convenient to use the AlertDialog.Builder.

通过覆盖
onCreateDialog-method将Builder编译成DialogFragment。您可以通过
将所选项目列表作为布尔数组传递给Bundle,然后使用setMultiChoiceItems。

Wrap the Builder into a DialogFragment by overwriting the onCreateDialog-method. You can pass the list of selected items via the Bundle as boolean array and then use is for setMultiChoiceItems.

public class CheckBoxAlertDialogFragment extends DialogFragment {
    public static CheckBoxAlertDialogFragment newInstance(boolean[] checkedItems) {
        CheckBoxAlertDialogFragment frag = new CheckBoxAlertDialogFragment();
        Bundle args = new Bundle();
        args.putBooleanArray("checkedItems", checkedItems);
        frag.setArguments(args);
        return frag;
}

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    final boolean[] checkedItems = getArguments().getBooleanArray("checkedItems");

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    // Set the dialog title
    builder.setTitle(R.string.pick_toppings)
            // Specify the list array, the items to be selected by default (null for none),
            // and the listener through which to receive callbacks when items are selected
            .setMultiChoiceItems(R.array.toppings, checkedItems,
                    new DialogInterface.OnMultiChoiceClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which,
                                            boolean isChecked) {
                            checkedItems[which] = isChecked;
                        }
                    })
            // Set the action buttons
            .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int id) {
                    // User clicked OK, so save the checkedItems results somewhere
                    // or return them to the component that opened the dialog
                    //...
                }
            })
            .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int id) {
                    //...
                }
            });

    return builder.create();
}
}


  • 在你的活动中,你应该有一个变量,例如名为checkedItems,类型为boolean [],其中保存了复选框状态。您可以通过以下方式打开对话框:

  • In your activity you should have a variable, e.g. named checkedItems, of type boolean[] somewhere which saves the checkbox states. You can open the dialog then with:

    void showDialog() {
            DialogFragment newFragment = CheckBoxAlertDialogFragment.newInstance(checkedItems);
            newFragment.show(getFragmentManager(), "dialog tag");
        }
    


  • 这篇关于用复选框实现对话框的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆