AlertDialog.builder的obj.create()和obj.show()以及obj.create().show()之间的区别是什么?

8
AlertDialog的builder类中的.create()方法和.show()方法有什么区别吗?例如,当我们使用以下代码创建警报对话框时:
AlertDialog.Builder builder = new 
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setMessage("");
builder.setPositiveButton(....)
builder.setNegativeButton(....)

推荐的使用惯例是什么,为什么要这样做?

builder.create() //I have seen this creates and displays the dialog

或者

builder.show() //this also displays the dialog

或者

builder.create().show() //well same thing

我已经阅读了文档,但是无法理解其中的内容。有什么建议吗?
2个回答

5

obj.create() - 用于创建对话框

obj.show() - 用于显示对话框 <- 如果您已经创建了对话框,则必须使用此方法才能显示对话框。

并且

obj.create().show() - 创建并显示对话框,即上述两个方法的组合。


如果我只调用 .create(),它不会弹出警告对话框吗? - drulabs
3
@KKD 没错!创建操作不会“显示”您的对话框。实际上,构建器的 show() 方法会先调用 create() 方法... - Rafael T
文档中说:“.create() 允许用户在显示对话框之前进行任何额外的处理”。只是好奇这些额外的处理是什么? - drulabs
谢谢大家。我已经得到了答案。 - drulabs
.create()和.show()不能等同于.create().show()。方法.create()返回AlertDialog。在第一种情况下,您正在调用AlertDialog.Builder的.create()和.show()方法;而在第二种情况下,您正在调用AlertDialog.Builder的.create()方法,然后是AlertDialog的.show()方法。 - akkishore
你介意给我们一个答案吗,@drulabs?我们在这里有点好奇。 - mochadwi

0

builder.show() 返回一个AlertDialog对象并立即显示它。如文档所述,调用此方法在功能上等同于:

AlertDialog dialog = builder.create();
dialog.show();

builder.create() 返回一个AlertDialog对象,该对象带有提供给构建器的参数,但不显示它。如果您想创建和存储AlertDialog对象以进行其他处理,则这可能很有用,之后可以调用dialog.show()


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接