AlertDialog创建时触发的方法是什么?

4

AlertDialog的创建会触发哪个方法?

与Activities中的onCreate()类似, 我的情况是:我有一个碎片,在这个碎片中我有一个按钮,使用了这个setOnClickListener()方法:

btnAddPromotionAw.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {

            AlertDialog.Builder builder = new AlertDialog.Builder(
                    getActivity());

            LayoutInflater inflater = (LayoutInflater) getActivity()
                    .getSystemService(getActivity().LAYOUT_INFLATER_SERVICE);

            View dialog = inflater.inflate(R.layout.promotion_aware_picker,
                    null);
            builder.setView(dialog);

            final AlertDialog alertDialog = builder.create();
            alertDialog.show();

            alertDialog.getWindow().setLayout(600,400);

          }         
    });

我想在上面创建的AlertDialog中执行下面的代码:

ArrayList<Goods> Goodslist = new ArrayList<Goods>();
                            Goodslist = promotionAwAccess
                                    .getGoodsByIsMerch();

                            LinearLayout ll1 = (LinearLayout) alertDialog
                                    .findViewById(R.id.linearLayoutPAGoods);

                            final RadioButton[] rdb = new RadioButton[Goodslist.size()];
                            RadioGroup rdg = new RadioGroup(getActivity());
                            rdg.setOrientation(RadioGroup.VERTICAL);
                            rdg.setGravity(Gravity.RIGHT);

                            for (int i = 0; i < Goodslist.size(); i++) {

                                rdb[i] = new RadioButton(getActivity());
                                rdg.addView(rdb[i]);
                                rdb[i].setText(Goodslist.get(i)
                                        .getGoodsName());
                                rdb[i].setId(i);
                                rdb[i].setButtonDrawable(android.R.color.transparent);
                                rdb[i].setCompoundDrawablesWithIntrinsicBounds(
                                        0, 0, R.drawable.btn_radio_custom,
                                        0);

                            }
                            ll1.addView(rdg);

抱歉一开始解释不够清楚。


OnWindowFocusChange(); - Sunit Kumar Gupta
在这里你可以找到如何将列表添加到对话框中的相关信息:http://developer.android.com/guide/topics/ui/dialogs.html#AddingAList。 - Ziem
我编辑了问题并提供了完整的解释。 - deuxdeux
3个回答

0
我是这样解决我的问题的: 我创建了一个继承自DialogFragment的类,并将Dialog的创建代码放在该类的onCreateDialog()方法中:
@Override
public AlertDialog onCreateDialog(Bundle savedInstanceState) {

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    LayoutInflater inflater = (LayoutInflater) getActivity()
                .getSystemService(getActivity().LAYOUT_INFLATER_SERVICE);

    dialog = inflater.inflate(R.layout.promotion_aware_picker, null);

    builder.setView(dialog);

    final AlertDialog alertDialog = builder.create();
    alertDialog.getWindow().setLayout(100, 100);

    **myMethode();**

    return alertDialog;
}

myMethod() 中放置需要在对话框弹出后显示的内容。

然后在主要的 Fragment 中创建一个 DialogFragment 实例并调用 show() 方法。

myDialogFragment dialog = new myDialogFragment();

dialog.show(getActivity().getFragmentManager(),"dialogTag");

谢谢大家。


0
AlertDialog.Builder builderSingle = new AlertDialog.Builder(
                    DialogActivity.this);
            builderSingle.setIcon(R.drawable.ic_launcher);
            builderSingle.setTitle("Select One Name:-");
            final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(
                    DialogActivity.this,
                    android.R.layout.select_dialog_singlechoice);
            arrayAdapter.add("Hardik");
            arrayAdapter.add("Archit");
            arrayAdapter.add("Jignesh");
            arrayAdapter.add("Umang");
            arrayAdapter.add("Gatti");
            builderSingle.setNegativeButton("cancel",
                    new DialogInterface.OnClickListener() {

                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            dialog.dismiss();
                        }
                    });

            builderSingle.setAdapter(arrayAdapter,
                    new DialogInterface.OnClickListener() {

                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            String strName = arrayAdapter.getItem(which);
                            AlertDialog.Builder builderInner = new AlertDialog.Builder(
                                    DialogActivity.this);
                            builderInner.setMessage(strName);
                            builderInner.setTitle("Your Selected Item is");
                            builderInner.setPositiveButton("Ok",
                                    new DialogInterface.OnClickListener() {

                                        @Override
                                        public void onClick(
                                                DialogInterface dialog,
                                                int which) {
                                            dialog.dismiss();
                                        }
                                    });
                            builderInner.show();
                        }
                    });
            builderSingle.show();

谢谢,没错,我编辑了问题并提供了完整的解释。 - deuxdeux

0

AlertDialog.show() 方法会启动对话框并在屏幕上显示它。如果您想自定义对话框的外观,可以在调用 show() 之前调用 AlertDialog.setView(View) 方法。对于您的情况,您可以创建一个包含 ListView 的布局。然后调用 AlertDialog.setView(LayoutInflater.from(content).inflate(R.layout.your-layout-name, null, false)) 来自定义对话框的外观。


没错,我编辑了问题并提供了完整的解释。 - deuxdeux

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