Android中显示Dialog的方法

来源:互联网 发布:mac 磁盘图标 名称 编辑:程序博客网 时间:2024/06/06 16:54

可能是楼主看的书太老了,所以才会有这种问题。但是我相信还有其他的朋友会遇到相同的问题,所以今天我就对Android中在Activity中创建Dialog的方法进行一下简短的讨论。

先看一个大家都很熟悉的方法:

protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        showDialog(0);    }    @Override    protected Dialog onCreateDialog(int id) {        switch (id){            case 0:                return ProgressDialog.show(this, "A progressDialog", "Please wait", true);        }        return null;    }

但是其实这种方式在Android API Level 13就已经@Deprecated了,那么有什么替代方法呢?

Google官方推荐替代方法如下:
使用DialogFragment:

  protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        button = (Button) findViewById(R.id.button);        button.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                showMyDialog();            }            private void showMyDialog() {                myDialog myDialog = new myDialog();                Bundle bundle = new Bundle();                bundle.putString("title", "A progressbar");                bundle.putString("description", "Please wait");                myDialog.setArguments(bundle);//        myDialog.setTargetFragment(this);                myDialog.show(getFragmentManager(), "tag");            }        });    }    class myDialog extends DialogFragment {        @Override        public Dialog onCreateDialog(Bundle savedInstanceState) {            //使用bundle传递一系列dialog需要的参数            Bundle bundle = getArguments();//            setContentView(R.layout.layout_dialog);            return new ProgressDialog.Builder(getActivity())                    .setTitle(bundle.getString("title"))                    .setIcon(R.drawable.ic_launcher)                    .setMessage(bundle.getString("description"))                    //能使用单独的XMl文件对dialog布局//                    .setView(R.layout.layout_dialog)                    .create();        }    }

说白了就是现在Google推荐使用对Dialog操作的API,而不是直接对Dialog本身进行操作,而且还可以借用到Fragment的优势。这种方法通过创建一个继承自DialogFragment的类实现(如上)。

那么如果只是创建一个简单的Yes/No的对话框,这样做是不是有一点“用牛刀杀鸡”的意味呢?那么可以像下面这样做:

protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        button = (Button) findViewById(R.id.button);        button.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                AlertDialog.Builder alertDialog = new ProgressDialog.Builder(MainActivity.this)                        .setTitle("Yes/No")                        .setPositiveButton("OK", new DialogInterface.OnClickListener() {                            @Override                            public void onClick(DialogInterface dialog, int which) {                                dialog.dismiss();                            }                        })                        .setNegativeButton("No", new DialogInterface.OnClickListener() {                            @Override                            public void onClick(DialogInterface dialog, int which) {                                dialog.dismiss();                            }                        })                        .setMessage("This is a YES/NO question.");                alertDialog.show();            }        });

具体可参考楼主看的这一篇帖子

0 0
原创粉丝点击