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!");    }

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

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

创建一个对话框的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();    }


在上述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();*/    }

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

   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();   }


这个布局文件比较简单,此处不再给出。

结论:
如果使用系统默认的布局创建对话框则单独使用AlertDialog.Builder即可无需通过其create()创建AlertDialog而如果使用自定义的对话框则必须使用AlertDialog.Builder的create方法来创建AlertDialog东西创建对话框。

更多相关文章

  1. 【Android开发】布局管理器-相对布局
  2. ViewPager And Fragment
  3. Android下利用SQLite数据库实现增删改查
  4. 将Android(安卓)Studio默认布局ConstraintLayout切换成LinearLay
  5. android 纯代码 详细编写布局文件
  6. Android如何使用SQLiteOpenHelper
  7. Android中的RecyclerView源码分析
  8. Android(安卓)Studio 中创建Flutter Project及环境配置(Mac环境)
  9. android实现点击按钮切换不同的fragment布局

随机推荐

  1. Android Service的重点及难点
  2. 关于EditText 焦点 及 软键盘弹出引起不
  3. 介绍一个Android的开源的自定义小控件:Te
  4. Android(安卓)Studio Mac 快捷键
  5. Android报unable to instantiate applica
  6. React-Native 调用原生方法,弹出自定义对
  7. Android (Android Studio)adb启动失败 无
  8. ubuntu10.04 编译 android 源码并导入Ecl
  9. 去掉ScrollVIew拉到尽头时再拉的阴影效果
  10. Android中的ClassLoader(PathClassLoader