今天遇到一个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错误的更多相关文章

  1. 报错:You need to use a Theme.AppCompat theme (or descendant) with this activity.

    学习 Activity 生命周期时希望通过 Dialog 主题测试 onPause() 和 onStop() 的区别,点击按钮跳转 Activity 时报错: E/AndroidRuntime: FA ...

  2. 关于新版SDK报错You need to use a Theme.AppCompat theme的两种解决办法

    android的一个小问题: Caused by: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme ( ...

  3. Android Studio:You need to use a Theme.AppCompat theme (or descendant) with this activity. AlertDialog

    学习<第一行代码>的时候遇到的问题. Process: com.example.sevenun.littledemo, PID: 2085 java.lang.RuntimeExcepti ...

  4. 关于新版SDK报错You need to use a Theme.AppCompat theme的两种解决办法 - 转

    android的一个小问题: Caused by: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme ( ...

  5. android对话框显示异常报错:You need to use a Theme.AppCompat theme (or descendant) with this activity.

    今天写android实验碰到到一个问题,在用AlertDialog.Builder类构建一个对话框之后,调用Builder.show()方法时抛出异常如下: - ::-/xyz.qlrr.sqlite ...

  6. android 弹出AlertDialog的学习案例

    我在编写的时候,测试的关键代码: AlertDialog.Builder builder=new AlertDialog.Builder(MainPointListActivity.this); bu ...

  7. vue+element项目中使用el-dialog弹出Tree控件报错问题

    1. 按正常的点击按钮,显示dialog弹出的Tree控件,然后把该条数据下的已经选中的checkbox , 用setCheckedNodes或者setCheckedKeys方法选择上 , 报下面这个 ...

  8. Back弹出AlertDialog

    package com.pingyijinren.helloworld.activity; import android.content.DialogInterface; import android ...

  9. 报错: Unable to start activity ComponentInfo:You need to use a Theme.AppCompat theme

    转自 http://www.2cto.com/kf/201605/506596.html

随机推荐

  1. Python学习杂记

    Python中关键字yield有什么作用? 首先得理解generators,而理解generators前还要理解iterables: 你可以用在for...in...语句中的都是可迭代的:比如list ...

  2. Mybatis之动态构建SQL语句(转)

    https://www.cnblogs.com/zhangminghui/p/4903351.html

  3. C语言三种方法调用数组

    #include <stdio.h> /********************************* * 方法1: 第一维的长度可以不指定 * * 但必须指定第二维的长度 * *** ...

  4. 在vue中使用后台提供 的token验证方式总结及使用方法

    token是相对会叫安全的使用暗码形式的数据传输,由后台产生,并且传输到前台,前台可以将保存,在前台每次发送请求的时候可以携带token,后台可以对token进行验证,通过验证的通过请求可以对数据进行 ...

  5. linux安装源码jdk

    第一步: 传输jdk到服务器上可以用xhsell,也可以用ftp 第二步:解压文件 tar -xzvf jdk-7u80-linux-x64.tar.gz 第三步:配置环境变量 输入即可 注意:修改J ...

  6. python爬虫之一:requests库

    目录 安装requtests requests库的连接异常 HTTP协议 HTTP协议对资源的操作 requests库的7个主要方法 request方法 get方法 网络爬虫引发的问题 robots协 ...

  7. 20145232 韩文浩 《Java程序设计》第8周学习总结

    教材学习内容总结 14 NIO与NIO2 NIO使用频道(channel)来衔接数据节点,对数据区的标记提供了clear(),rewind(),flip(),compact()等高级操作. 想要取得c ...

  8. NLP生成论文

    论文框架 内容 注:既要有引用,又不能完全引用,是在前人基础上更进一步.

  9. c语言:简单排序:冒泡排序法、选择排序法、插入排序法(待写)

    1.冒泡排序法: 假设有n个数需要按从小到大排序,冒泡排序的原理是,在这一排数字中,将第一个数与第二个数比较大小,如果后面的比前面的小,就将他们交换位置.然后再比较第二个和第三个,再交换,直到第n-1 ...

  10. CentOS 5.5 防火墙开启、关闭以及开放指定端口

    之前有讲过公司新买的服务器使用的是CentOS5.5, 部署好Tomcat之后却发现输入114.80.*.*:8080(即ip:8080)却无法显示Tomcat默认的首页. 因为以前部署在Win Se ...