弹出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

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

原文地址:https://www.cnblogs.com/Yintianhao/p/9886829.html

时间: 2024-10-19 08:11:53

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

关于引用Theme.AppCompat theme的报错问题

建立V7包库(Library)项目以供其他项目引 Chapter: 使用support-v7 ActionBar前的那些坑 1. 建立V7包库(Library)项目以供其他项目引用 2. v7库项目themes_base.xml相关文件报错问题 3. 关于引用Theme.AppCompat theme的报错问题 以前3.0以前的版本要使用ActionBar,必须使用国外大牛写的ActionBarSherlock这个开源项目.2013年的Google I/O大会之后,Google官方在androi

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

有两个解决办法: 1. 把我们当前的Activity所继承的ActionBarActivity,改为继承Activity(android.app.Activity). 2.我出现错误的地方是因为使用了AlertDialog,发现我导入的android.support.v7.app.AlertDialog,然后我就改为导入android.app.AlertDialog就成功了.

Android studio使用android:style/Theme.Dialog报错:You need to use a Theme.AppCompat theme (or descendant) with this activity. at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2913)

查找原因是在activity java代码部分继承了compatactivity public class DialogActivity extends AppCompatActivity 但是在AndroidManifest.xml里面确定义成Dialog, <activity android:name=".DialogActivity" android:theme="@android:style/Theme.Dialog"></activity

android Dialog 底部弹出

. if (dialShareDialog == null) { dialShareDialog = new Dialog(context, R.style.dialog); dialShareDialog.setContentView(R.layout.dialog_share); dialShareDialog.setCanceledOnTouchOutside(true); // 获取对话框的窗口,并设置窗口参数 WindowManager.LayoutParams lp=dialShar

从仿QQ消息提示框来谈弹出式对话框

<代码里的世界> -UI篇 用文字札记描绘自己 android学习之路 转载请保留出处 by Qiao http://blog.csdn.net/qiaoidea/article/details/45896477 [导航] - 自定义弹出式对话框的简单用法 列举各种常见的对话框实现方案 1.概述 android原生控件向来以丑著称(新推出的Material Design当另说),因此几乎所有的应用都会特殊定制自己的UI样式.而其中弹出式提示框的定制尤为常见,本篇我们将从模仿QQ退出提示框来看一

关于软键盘弹出的问题

最近在做一个项目,大部分页面由fragment实现,需要发帖功能,在界面上部分为EditText,右下有一个发送按钮,下面总结一下遇到的问题: 没有进行软键盘弹出和EditText获取焦点配置时,跳转到发帖页面,EditText自动获取焦点,软键盘弹出,但偶而出现弹出的软键盘覆盖发送按钮的情况 解决方法是通过设置manifest文件中activity属性如下,确保软键盘弹出时为挤压上面显示,而不是覆盖 <activity android:name=".ui.activity.MainAct

Android 使用弹出对话框,报Unable to add window错误

今天在使用Android弹出对话框的时候,报了一个unable to add window错误,我的代码如下 new AlertDialog.Builder(getApplicationContext()).setTitle("提示").setMessage("你确定要删除么?") .setPositiveButton("确定", new DialogInterface.OnClickListener() { public void onClic

安卓弹出对话框——Alertdialog(一)

首先看各种样式的对话框: 我们看到,Dialog有很多的子类实现,所以我们要定义一个对话框,使用其子类来实例化一个即可,而不要直接使用Dialog这个父类来构造. 二.AlertDialog 今天我们重点要来了解的就是AlertDialog对话框,我们看到,AlertDialog是Dialog的一个直接子类. 使用AlertDialog,我们可以显示一个标题,最多3个按钮操作,以及一组选择框或者是自己定义的弹出框. 这里借用android的官方文档提供的一个图来看看AlertDialog框的组成

android的alertdialog中加入edittext但是不弹出软键盘等问题的解决与原因

摘要:alertdialog中加入edittext但是不弹出软键盘等问题网上有很多不管用的解决方案, 本文意在给出更有效的解决办法,并初步探究其原因 正文 在对话框中插入文本框是十分常见的需求 通常我们选择在代码中创建edittext对象 这个时候就需要在代码中给edittext设置输入属性了 但是经常发现设置的属性不起作用,甚至都不弹出软键盘(虽然实体键盘可以输入) 问题的解决方案有很多种,这里介绍一种我比较常用的方法: inputPassEditText.setInputType(Input