Android中显示Dialog的方法

可能是楼主看的书太老了,所以才会有这种问题。但是我相信还有其他的朋友会遇到相同的问题,所以今天我就对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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值