android 开发零起步学习笔记(二十三): Android 对话框AlertDialog和AlertDialog.Builder两者的区别

借鉴的文章:http://blog.csdn.net/canot/article/details/50526409


AlertDialog也是Android系统当中最常用的对话框之一。 程序员可以给AlertDialog对话框设置相应的信息。比如title,massage,setSingleChoiceItems,setPositiveButton,setNegativeButton等等。。

但不能直接通过AlertDialog的构造函数来生产一个AlertDialog。查看源码发现AlertDialog所有的构造方法都是protected的。 
AlertDialog构造方法源码如下:

 protected AlertDialog(Context context) {
        super((Context)null, false, (OnCancelListener)null);
        throw new RuntimeException("Stub!");
    }

    protected AlertDialog(Context context, boolean cancelable, OnCancelListener cancelListener) {
        super((Context)null, false, (OnCancelListener)null);
        throw new RuntimeException("Stub!");
    }

    protected AlertDialog(Context context, int themeResId) {
        super((Context)null, false, (OnCancelListener)null);
        throw new RuntimeException("Stub!");
    }
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

所以为了获取AlertDialog对象,系统提供了一个静态内部类Builder让我们使用,通过Builder可以创建AlertDialog对象:

 AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
 AlertDialog  dialog = builder.create();
 
 
  • 1
  • 2
  • 1
  • 2

创建一个对话框的DEMO:

private AlertDialog dialog;
    public void  showDialogue(View view){
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("删除信息");
        builder.setMessage("确定删除吗?");
        builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                Toast.makeText(MainActivity.this, "你点击了确定", Toast.LENGTH_LONG).show();
                dialog.dismiss();
            }
        });
        builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                Toast.makeText(MainActivity.this,"你点击了取消",Toast.LENGTH_LONG).show();
                dialog.dismiss();
            }
        });

        dialog = builder.create();

        dialog.show();
    }
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

这里写图片描述 
在上述DEMO中,我们先创建 AlertDialog的内部类Builder,然后给这个builder设置布局信息,如title,message。两个点击按钮并分别为两个按钮设置监听等。 
如上DEMO中我们既使用了AlertDialog.Builder又使用了AlertDialog,其实在如上使用了系统提供的默认布局中只使用AlertDialog.Builder而不是创建AlertDialog的实例也可以完成显示。

public void  showDialogue(View view){
        final AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("删除信息");
        builder.setMessage("确定删除吗?");
        builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                Toast.makeText(MainActivity.this, "你点击了确定了", Toast.LENGTH_LONG).show();
                // dialog.dismiss();
            }
        });
        builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                Toast.makeText(MainActivity.this, "你点击了取消了", Toast.LENGTH_LONG).show();
                //dialog.dismiss();
            }
        });
         builder.show();
        /*dialog = builder.create();

        dialog.show();*/
    }
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

两个执行的执行效果一模一样。现在我们不使用系统提供的布局,我们显示一个自定义布局的对话框。

   AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        dialog = builder.create();
        //将自定义的布局设置给AlertDialog
        View view = View.inflate(UiUtils.getContext(), R.layout.updategroup, null);
        dialog.setView(view);
        //获取布局中的按钮并设置这个自定义布局的监听
       Button button = (Button) view.findViewById(R.id.update_ok);
       final EditText editText = (EditText) view.findViewById(R.id.new_group_name);
       button.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View view) {
              //自定义布局中按钮的点击事件
        }
        });
        //i显示自定义布局对话框
         dialog.show();
   }
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

这里写图片描述 
这个布局文件比较简单,此处不再给出。

结论: 
一个是dialog的show,一个是builder的show。两者基本一样,

源码:

AlertDialog.Builder.show()
{
AlertDialog dialog = create();
dialog.show();
return dialog;
}

如果用dialog的show,可以dimiss。

如果用builder的show,你得不到dialog的指针,无法操作dialog的相关的操作了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值