此处不讲原理(原理有关activity 的Token),原理自备梯子。
1 详细参考http://www.jianshu.com/p/5849ff24e486
2 实际上安卓弹出的对话框 吐司都是需要添加到手机的窗口上的
3 对话框报错(此处传参数this是不会报错的):
public void normal(View view){
AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext());
builder.setTitle("对话框");
builder.setMessage("这是一个常见的对话框");
builder.show();
}
报错:
java.lang.IllegalStateException: Could not execute method for android:onClick
Caused by: java.lang.reflect.InvocationTargetException
Caused by: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
4 两种上下文的区别
getApplicationContext() 返回Context对象
this(此处为MainActivity对象,当前的Activity对象)
查看源码发现Activity最终才继承Context
父类有的子类一定有 子类有的父类不一定有
使用this告诉了对话框具体显示在了那个activity上 而使用getApplicationContext()不知道要绑定在哪个activity上面
注 对话框不能使用 getApplicationContext() 只能使用this
5 进度条对话框:
ProgressDialog 使用简单可以直接new
与进度相关的控件可以直接在子线程更新ui