弹出AlertDialog的时候报You need to use a Theme.AppCompat theme (or descendant) with this activity错误

Posted blog_thyin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了弹出AlertDialog的时候报You need to use a Theme.AppCompat theme (or descendant) with this activity错误相关的知识,希望对你有一定的参考价值。

今天遇到一个bug,用百度地图的时候,我对上面的标注设置了点击监听,设置的相应的反应是弹出一个AlertDialog

记录一解决bug的历程

但是Dialog却没有弹出来,一看AS下面,报了这错,起初我看我gradle.app里面

implementation \'com.android.support:appcompat-v7:24.2.1\'

  

这句话是红色,我以为是包冲突,但是上午我安卓课上我明明也是用的这个,是可以正常弹出Dialog的

然后我查了查网上,

一种说法:很多说把Activity的父类换成android.app.Activity,我一试,但是发现继承他的话getActionBar()就没有了

二种说法:把Style.xml的ApptTheme 的风格换成没有ActionBar的,而这肯定不是我要的答案,因为我的有ActionBar

之后我可算是找到了答案(其实说到底是偷懒耍小聪明导致的)

链接在这http://www.voidcn.com/article/p-okazhnzl-hx.html

原因出在我的AlertDialog代码里

AlertDialog dialog = new AlertDialog.Builder(Passenger.this)
                            .setTitle("乘客信息")
                            .setView(view)
                            .create();
                    dialog.setTitle("用户乘客");
                    dialog.setCanceledOnTouchOutside(false);
                    dialog.show();

  

这里是我改正过来的,我原来Builder后面的括号里是用的getApplicationContext(),天真的我以为和Activity.this是一样的,任何地方都可以换着用

因为之前换过几次发现也没什么问题,但是我没发现安卓课上我用的就是Activity.this...

然后我百度了一下这两个的区别:

(1)对于getApplicationContext,我们可以假定它是一个父类,它属于整个应用程序共有,Activity.this可以假定为其的一个子类,该子类包

含了一些特定的引用。所以,一般可以用getApplicationContext的地方都可以用特定的Activity.this代替。

(2)在生命周期上,通过getApplicationContext得到的上下文对象们只要当前的应用程序还存在,那么该对象就会一直存在,对于Activity.this

上下文来说,只要当前的activity执行了onDestory方法,这个上下文对象就会一起被系统收回。

(3)在应用场景上,如果我们通过一个上下文对象来执行某个动作,且希望一直处于活跃状态,那么应该用getApplicationContext来获取上下

文,如数据库的操作。此时,如果采用Activity.this,那么当前Activity调用onDestory方法时,数据库就会关闭,应用程序会产生错误。

所以最后还是因为我把这两个混用了的原因,我猜测原因是Dialog对应全局上下文中的theme之类的设定和Activity.this中的是不同的所以报错

关于这两个的区别更详细的区别可以看这里,这位博主总结的很好

https://www.cnblogs.com/SZ2015/p/6884039.html

 

Last but not least,

如果看到这里发现我的这个不适用与自己问题的朋友可以看下面:

http://www.voidcn.com/article/p-beayjmst-nx.html

这网页下面有一系列出现这问题可能的原因的文章,总有一个适合你...

以上是关于弹出AlertDialog的时候报You need to use a Theme.AppCompat theme (or descendant) with this activity错误的主要内容,如果未能解决你的问题,请参考以下文章

Cannot find name ‘XX‘. Do you need to change your target library

编译mcrypt时,报错:You need at least libmhash 0.8.15

Redis 安装报错 You need tcl 8.5 or newer in order to run the Redis test

conda激活环境报错:IMPORTANT: You may need to close and restart your shell after running ‘conda init‘.

错误记录Android 应用运行报错 ( You need to use a Theme.AppCompat theme (or descendant) with this activity. )(代

Couldn't find a tree builder with the features you requested: lxml. Do you need to install a par