Dialog基础(在一个Activity中创建多个Dialog)

Android Dev-Guide 推荐重写Activity.onCreateDialog()方法来创建Dialog,这样Dialog就归属于这个Activity了。

使用方法是这样的,Activity.showDialog()激发Activity.onCreateDialog()创建Dialog,然后显示之,便于多个Dialog的统一管理。

注意,以后再用Activity.showDialog()显示同一个Dialog时,则不会调用Activity.onCreateDialog(),而是调用Activity.onPrepareDialog(),使用上一次显示Dialog时的状态。即 
    第一次:showDialog() -> onCreatedialog() 
    以后: showDialog() -> onPrepareDialog() 

 

在示例代码中,分别用createExitDialog(),createListDialog(),createRadioDialog(),createCheckboxDialog(),创建4种Dialog,并在Activity中显示。示例代码如下:

public class ShowDialogActivity extends Activity {
    /**
     * Called when the activity is first created.
     */
    public static final String TAG = "ShowDialog";
    public static final int ID_EXIT_DIALOG = 1;
    public static final int ID_LIST_DIALOG = 2;
    public static final int ID_RADIO_DIALOG = 3;
    public static final int ID_CHECKBOX_DIALOG = 4;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        showDialog(ID_EXIT_DIALOG);
        showDialog(ID_LIST_DIALOG);
        showDialog(ID_RADIO_DIALOG);
        showDialog(ID_CHECKBOX_DIALOG);
    }
    @Override
    protected Dialog onCreateDialog(int id) {
        Dialog dialog = null;
        switch (id) {
            case ID_EXIT_DIALOG:
                dialog = createExitDialog();
                break;
            case ID_LIST_DIALOG:
                dialog = createListDialog();
                break;
            case ID_RADIO_DIALOG:
                dialog = createRadioDialog();
                break;
            case ID_CHECKBOX_DIALOG:
                dialog = createCheckboxDialog();
                break;
            default:
                break;
        }
        if (dialog != null) {
            Log.i(TAG, dialog.toString());
        } else {
            Log.i(TAG, "dialog = null");
        }
        return dialog;
    }
    @Override
    protected void onPrepareDialog(int id, Dialog dialog) {
        super.onPrepareDialog(id, dialog);
    }
    //创建简单Dialog
    public Dialog createExitDialog() {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setMessage("Are you sure you want to exit?")
                .setCancelable(false)
                .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int id) {
                        ShowDialogActivity.this.finish();
                    }
                })
                .setNegativeButton("No", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int id) {
                        dialog.cancel();
                    }
                });
        return builder.create();
    }
    //创建ListDialog
    public Dialog createListDialog() {
        final CharSequence[] items = {"Red", "Green", "Blue"};
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Pick a color");
        builder.setItems(items, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int item) {
                Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show();
            }
        });
        return builder.create();
    }
    //创建单选Dialog
    public Dialog createRadioDialog() {
        final CharSequence[] items = {"Red", "Green", "Blue"};
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Pick a color");
        builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int position) {
                Toast.makeText(getApplicationContext(), position + " -> " + items[position], Toast.LENGTH_SHORT).show();
                dialog.dismiss();
            }
        });
        return builder.create();
    }
    //创建多选Dialog
    public Dialog createCheckboxDialog() {
        final CharSequence[] items = {"Red", "Green", "Blue"};
        final boolean[] checked = new boolean[]{false, false, false};
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Pick a color");
        builder.setMultiChoiceItems(items, checked, new DialogInterface.OnMultiChoiceClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which, boolean isChecked) {
            }
        });
        builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int id) {
                        ShowDialogActivity.this.finish();
                    }
                })
                .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        dialog.cancel();
                    }
                });
        return builder.create();
    }
}

 

posted @ 2015-09-12 16:47  javakam  阅读(60)  评论(0)    收藏  举报  来源