Android开发解决popupWindow重叠报错问题
作者:tpnet 发布时间:2022-08-02 13:27:01
标签:android,popupwindow
在popupWindow里面再弹出popupWindow的时候会报这样的错误
ERROR/AndroidRuntime(888): android.view.WindowManager$BadTokenException: Unable to add window -- token android.view.ViewRoot$W@44ef1b68 is not valid; is your activity running?
报错的意思大概就是说依赖的Activity没了。
解决方法1
不要在当前的popupWindow里面继续show一个popupWindow,应该写一个接口回调到Activity里面进行show,
解决方法2
如果只是简单的弹窗提醒的话,把第二次弹出的popupwindows改为Toast,
public class VerifySuccessDialog extends Toast {
public VerifySuccessDialog(Context context) {
super(context);
//设置toast的View
setView(LayoutInflater.from(context).inflate(R.layout.include_popwindow_verify, null));
//弹出位置
setGravity(Gravity.CENTER, 0, 0);
//时长
setDuration(Toast.LENGTH_SHORT);
}
}
用的地方就
new VerifySuccessDialog(mActivity).show();
解决方法3
第二次弹窗改为Dialog,设置dialog的style,在Style.xml添加
<style name="VerifyDialog" parent="@android:style/Theme.Holo.Dialog.NoActionBar">
<item name="android:windowBackground">@drawable/trans</item>
<item name="android:windowFrame">@null</item>
<item name="android:windowIsFloating">true</item>
<item name="android:backgroundDimEnabled">true</item>
<item name="android:windowSoftInputMode">adjustPan</item>
</style>
定义一个Dialog类
public class VerifySuccessDialog extends Dialog {
//用来设置时间自动关闭
private int showTime;
public VerifySuccessDialog(Context context) {
super(context, R.style.VerifyDialog);
setContentView(R.layout.include_popwindow_verify);
}
public int getShowTime() {
return showTime;
}
public void setShowTime(int showTime) {
this.showTime = showTime;
}
}
用就直接:
VerifySuccessDialog dialog = new VerifySuccessDialog(mActivity);
显示的地方
dialog.show();
来源:https://blog.csdn.net/niubitianping/article/details/51913860


猜你喜欢
- 本文实例讲述了Java通过在主循环中判断Boolean来停止线程的方法。分享给大家供大家参考,具体如下:package Threads;/*
- 最近单位又有一个新Java项目。涉及到扫码登录。之前项目使用的是 ajax轮询的方式。感觉太low了。所以这次用webSocket的方式进行
- Object是所有类的父类,任何类都默认继承Object。一、Object类中的方法1.clone方法保护方法,实现对象的浅复制,只有实现了
- 本文实例为大家分享了Java实现简单猜拳游戏的具体代码,供大家参考,具体内容如下看网上的猜拳游戏那么多,但都是用switch输入数字,所以用
- 策略模式也是一种非常常用的设计模式,而且也不复杂。下面我们就来看看这种模式。定义:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使
- Java中数组初始化和OC其实是一样的,分为动态初始化和静态初始化,动态初始化:指定长度,由系统给出初始化值静态初始化:给出初始化值,由系统
- Spring自动装配之方法、构造器位置的自动注入1. 注解定义@Autowired的定义信息如下:@Target({ElementType.
- 本文实例为大家分享了Intent实现页面跳转的两种的方法,供大家参考,具体内容如下下图中两个不同的方法就是两种页面之间跳转的情况1).跳转不
- 背景spring的profile大家都是用的溜的飞起~那么profile的组合如何使用呢???比如我们这样使用@Profile({"
- 1.线程与进程进程是代码在数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,线程则是一个实体,一个进程中至少有一个线程,是CPU
- 1. 为什么要更改SpringBoot运行方式?Tomcat Connector(连接器)有三种运行模式:bio nio aprbio(bl
- JVM自带的类加载器:其关系如下:其中,类加载器在加载类的时候是使用了所谓的“父委托”机制。其中,除了根类加载器以外,其他的类加载器都有且只
- Kotlin定义变量一般有如下写法lateinit var name: String var age: String? = null那么用l
- 我们在设计layout的时候,使用Split视图,就是左侧是代码,右侧是设计图,但是我们忽视了最上方的工具栏,这里才是真正的宝藏。下面教大家
- 这篇文章主要介绍了SpringBoot路径映射实现过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要
- C#如何安全、高效地玩转任何种类的内存之Span的本质一、what - 痛点是什么?回答这个问题前,先总结一下如何用C#操作任何类型的内存:
- 1. c语言中的整数类型有char, short, int, long等几种, 下面是C语言对每种数据类型长度的规定: (a). short
- 1 仿射变换仿射变换:一种二维坐标到二维坐标的线性变换,它保持二维图像的平直性与平行性,即变换后直线依然是直线,平行的线依然平行。packa
- 一、ConcurrentBag类ConcurrentBag<T>对外提供的方法没有List<T>那么多,但是同样有E
- 前言之前写过一篇关于配置中心对配置内容加密解密的介绍:《Spring Cloud构建微服务架构:分布式配置中心(加密解密) 》。在这篇文章中