之前用AlertDialog的时候
其实没有仔细研究这个东西
现在稍微研究了一下
还是很有意思的
我们搞几个方法
来测试一下AlertDialog
public void test4(View view) {
View inflate = View.inflate(ctx, R.layout.dialog_abc, null);
new AlertDialog.Builder(ctx).setView(inflate).show();
}
public void test3(View view) {
new AlertDialog.Builder(ctx).setView(R.layout.dialog_abc).show();
}
public void test2(View view) {
new AlertDialog.Builder(ctx).setMessage("ok").show();
}
public void test1(View view) {
new AlertDialog.Builder(ctx).show();
}
先看test1
这里我们创建了AlertDialog.Builder
然后show方法展示
点击按钮我们发现,画面变暗了,但是弹框没出现
这是因为我们的dialog什么东西都没有
然后我们看test2
我们设置了message
然后点击按钮
我们发现有一个弹框,里面是一句话
然后我们看test3
我们设置了View
点击按钮
我们发现是按照我们的R.layout.dialog_abc来显示的
然后我们看test4
和test3一样的效果
所以这两个都可以用
然后我们看一下show方法的源码
/**
* Creates a {@link AlertDialog} with the arguments supplied to this builder and
* {@link Dialog#show()}'s the dialog.
*/
public AlertDialog show() {
AlertDialog dialog = create();
dialog.show();
return dialog;
}
原来Builder的show方法
依然是先create
然后再调用dialog的show方法
所以其实这是一种Builder的快捷方法
那么我们看一下create方法的使用
Builder实际上就是一个工厂
可以批量生产dialog
我们来一段代码
AlertDialog.Builder builder = null;
@Override
public void initViews() {
builder = new AlertDialog.Builder(ctx).setTitle("abc");
}
public void test1View view) {
builder.setMessage("AAA");
AlertDialog dialog = builder.create();
dialog.show();
}
public void test2(View view) {
builder.setMessage("BBB");
AlertDialog dialog = builder.create();
dialog.show();
}
public void test3(View view) {
builder.setMessage("CCC");
AlertDialog dialog = builder.create();
dialog.show();
}
我们看到
builder已经有了标题abc
然后我们可以根据需要,设置message
然后create出我们想要的dialog
然后show出来
所以builder就是一个工厂,一个生产者