Fragment 使用 Dialog 报错Unable to add window -- token null is not for an application

在fragment里面获取上下文 习惯了用getActivity().getApplicationContext()

错误代码:

private void showChoiceUpdata(){
    new AlertDialog.Builder(getActivity().getApplicationContext())
            .setTitle("检测有新版本")
            .setMessage("您要升级吗")
            .setPositiveButton("", null)
            .setNegativeButton("", null)
            .show();
}

报错Unable to add window -- token null is not for an application

正确代码:

private void showChoiceUpdata(){
    new AlertDialog.Builder(this.getActivity())
            .setTitle("检测有新版本")
            .setMessage("您要升级吗")
            .setPositiveButton("", null)
            .setNegativeButton("", null)
            .show();
}

对于AlertDialog来说,是须要依赖一个View,而View是相应于Activity的。只有一个Activity才能添加一个窗体。

getApplicationContext()指的则是整个应用的上下文。

对于一个应用Context来说。它的生命周期是整个应用程序的生命周期。而对于Activity来说。当它销毁之后它的生命周期就结束了。

AlertDialog是属于Acitivity的,当Activity销毁的时候它也必须销毁,所以这里我们指定是Activity的Context。

顺便一说在Activity使用Dialog,参是依然不能用Context,用this或者MyActivity.this

原址 https://www.cnblogs.com/mthoutai/p/6953542.html



发布了37 篇原创文章 · 获赞 10 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/shsh_0415/article/details/79892112