安卓Dialog对话框多次显示而闪退的解决办法
事情是这样子的,我在一个活动中自定义了一个AlertDialog,通过一个按钮点击即可弹出,而后来出现的情况是,第一次点击就没问题,
正常跳出,而第二次就直接程序闪退,然后报The specified child already has a parent. You must call removeView的错误,
这是我的AlertDialog的代码,和布局
final AlertDialog setTheOrder = new AlertDialog.Builder(Passenger.this)
.setView(R.layout.order_layout)
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//以下都是这个Dialog布局中的一些控件
getLocation("湘潭",startInput.getText().toString(),0);
getLocation("湘潭",endInput.getText().toString(),1);
startPlace = startInput.getText().toString();
endPlace = endInput.getText().toString();
startTime = getFormatTime(startTimeInput_h.getText().toString(),startTimeInput_m.getText().toString());
endTime = getFormatTime(endTimeInput_h.getText().toString(),endTimeInput_m.getText().toString());
supplyCar = getSupplyCar(canSupplyCar.getText().toString()); }
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) { }
}).create();
setTheOrder.show();
再来看这个错误,字面意思呢,就是说这个特定的child已经有了一个父布局,必须移除这个布局,才能继续你的内容,经过一番查找,一个子类View,要使用必须依赖于父类View,如果要使用子类的View,必须先调用父类的removeView的方法才能保证子类的使用(不知道表述的对不对,错了烦请大佬们指正)
好了,既然大概的思路有了,我们先得得到一个父类对象,我找到两个解决办法,
第一
通过活动的onCreate方法里面setContentView里面那个布局,调用
LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
LinearLayout parent = (LinearLayout) inflater.inflate(R.layout.order_layout, null);
这两个方法得到父类对象,然后使用完这个Dialog之后,调用removeAllViews,在上面AlertDialog的两个button里面的最后,调用这个方法
final AlertDialog setTheOrder = new AlertDialog.Builder(Passenger.this)
.setView(parent)
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
getLocation("湘潭",startInput.getText().toString(),0);
getLocation("湘潭",endInput.getText().toString(),1);
startPlace = startInput.getText().toString();
endPlace = endInput.getText().toString();
startTime = getFormatTime(startTimeInput_h.getText().toString(),startTimeInput_m.getText().toString());
endTime = getFormatTime(endTimeInput_h.getText().toString(),endTimeInput_m.getText().toString());
supplyCar = getSupplyCar(canSupplyCar.getText().toString());
parent.removeAllViews();
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
parent.removeAllViews();
}
}).create();
setTheOrder.show();
我这里是规定了只能点这两个按钮才能结束这个Dialog,其实如果设置了点击Dialog之外的屏幕区域也可以退出Dialog的话,在相应的方法里面也要调用
第二,报这个错误的原因是因为本来的视图有一个View,而你重新显示的时候,相当于重新给他添加一个View(因为Dialog生成的时候执行了setView这个函数),这时就会报错,所以,粗暴一点的解决办法就是在紧接着Dialog前面将View重新加载,相当于每次都重新生成一个新的对象,这样便不会报错
安卓Dialog对话框多次显示而闪退的解决办法的更多相关文章
- windows10中git-bash闪退的解决办法
windows10中git-bash闪退的解决办法 出现错误详情 Windows10 64位专业版安装git .18之后出现 Git闪退,报错信息:bash: /dev/null: No such d ...
- pyinstaller打包exe文件闪退的解决办法
pyinstaller是python下目前能打包py文件为windows下的exe文件的一个非常友好易用的库!但是,小爬每次用pyinstaller打包时也总是遇到一些难题,有时网上搜了一圈,也没看到 ...
- Ubuntu使用MyEclipse闪退的解决办法
修改myeclipse.ini文件, -Xmx512m-XX:MaxPermSize=512m-XX:ReservedCodeCacheSize=256m-Dosgi.nls.warnings=ign ...
- 关于ArcMap中打开ArcToolbox导致闪退的解决办法
最近好久不用ArcGis的小编要用到ArcMap去发送一个GP服务,发现按照套路打开ArcMap点击ArcToolbox时,发生了ArcMap的闪退现象,几经周折终于解决了问题. 希望也遇到这类问题的 ...
- discuz2.5登录后台闪退的解决办法
今天突然发现discuz2.5论坛后台进不去,开始以为密码错了,但发现登录后也是闪退.我试着清除浏览器cookie,也换了其他浏览器也没有用,还是上网找找吧! discuz2.5进入后台闪退的原因: ...
- 某些编辑器运行C程序闪退的解决办法
在某些C语言编辑器中运行C语言程序或点击生成的.exe文件出现闪退现象的解决办法,主要有两种,还有其它方法欢迎交流. 包含头文件<windows.h>,在程序末尾添加system(&quo ...
- React Native 微信分享闪退的解决办法
Android中编写微信分享功能时出现了闪退的现象,经过几番资料的查找,发现是应用签名的问题,解决办法如下: 1. 进入微信官网的开放平台--->资源中心---->资源下载----& ...
- android手机关于google play商店闪退的解决办法
部分android手机没有安装google play商店,这个可以通过类似“机锋”.“360手机助手”等应用市场下载. 安装google play商店后,点击打开却一闪而过:这个问题是因为手机没有安装 ...
- Android SDK Manager 闪退的解决办法
(一)方案一 原理: SDK Manager.exe 通过调用 android-sdk-windows\tools\lib\find_java.bat 确认 java.exe 的路径 启用 cmd ...
随机推荐
- Java基础之多线程没那么复杂!
多线程的引入 1.什么是多线程 线程是程序执行的一条路径,一个进程中可以包含多条线程;多线程并发执行可以提高程序的效率</br> 2.进程和线程之间的关系 操作系统可以同时执行多个任务,每 ...
- MongoDB-环境搭建
1.下载并安装MongoDB服务 下载地址:mongodb-win32-x86_64-2008plus-ssl-3.2.8-signed 可直接运行mongod命令启动MongoDB服务器,也可以将M ...
- Redis集群的主从切换研究
目录 目录 1 1. 前言 1 2. slave发起选举 2 3. master响应选举 5 4. 选举示例 5 5. 哈希槽传播方式 6 6. 一次主从切换记录1 6 6.1. 相关参数 6 6.2 ...
- python基础回顾
1.第二个缺点就是代码不能加密.如果要发布你的Python程序,实际上就是发布源代码,这一点跟C语言不同,C语言不用发布源代码,只需要把编译后的机器码(也就是你在Windows 上常见的xxx.exe ...
- java基础-day27
第04天 java基础加强 今日内容介绍 u Xml的综合案例 u 注解 u 类的加载 u 动态代理 第1章 注解 1.1 注解概述 l 什么是注解:Annotation注解,是一种代码级别的 ...
- C++插件架构浅谈与初步实现
一.插件架构初步介绍 想到写本博客,也没想到更好的名字,目前就先命这个名吧.说到插件架构,或许大部分IT从业者都听过或者某些牛人也自己实现过稳定高效的插件框架.目前有很多软件以及库都是基于插件架构,例 ...
- Hdu2389 Rain on your Parade (HK二分图最大匹配)
Rain on your Parade Problem Description You’re giving a party in the garden of your villa by the sea ...
- FPGA&ASIC基本开发流程
FPGA&数字IC笔面试常考系列 题目:简述ASIC设计流程,并列举出各部分用到的工具. ASIC开发基本流程 芯片架构,考虑芯片定义.工艺.封装 RTL设计,使用Verilog.System ...
- poj 2192 Zipper
题目 刚开始本来觉得可以用队列来写,但是 例如 ta te teta,ta的t先出队列那就不行了,所以还得用dp dp[i][j] 表示A前i个字符与B前j个字符是否能构成C前i+j个字符 要使 dp ...
- java的并发和多线程
本文主要讲解Java并发相关的内容,包括锁.信号量.堵塞队列.线程池等主要内容. 并发的优点和缺点 在讲述怎么利用多线程的情况下,我们先看一下采用多线程并发的优缺点. 优点 提高资源利用率 如读取一个 ...