zoukankan      html  css  js  c++  java
  • 弹出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

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

  • 相关阅读:
    HDU 1114 Piggy-Bank
    HDU 2955 Robberies
    NTOJ 290 动物统计(加强版)
    POJ 3624 Charm Bracelet
    HDU 2602 Bone Collector
    POJ 1523 SPF(无向图割顶)
    HDU 5311 Hidden String
    HDU 1421 搬寝室
    HDU 1058 Humble Numbers
    POJ 3259 Wormholes(spfa判负环)
  • 原文地址:https://www.cnblogs.com/Yintianhao/p/9886829.html
Copyright © 2011-2022 走看看