安卓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 ...
随机推荐
- my.ini优化mysql数据库性能的十个参数(推荐)
(1).max_connections:允许的同时客户的数量.增加该值增加 mysqld 要求的文件描述符的数量.这个数字应该增加,否则,你将经常看到 too many connections 错误. ...
- 2018.11.17 hdu5829Rikka with Subset(ntt)
传送门 nttnttntt基础题. 考虑计算每一个数在排名为kkk时被统计了多少次来更新答案. 这样的话,设anskans_kansk表示所有数的值乘上排名为kkk的子集数的总和. 则ansk=∑i ...
- 2018.11.02 NOIP模拟 飞越行星带(最小生成树/二分+并查集)
传送门 发现题目要求的就是从下到上的瓶颈路. 画个图出来发现跟去年noipnoipnoip提高组的奶酪差不多. 于是可以二分宽度+并查集检验,或者直接求瓶颈. 代码
- python报错ModelNotFoundError
很可能是因为工作目录并不在sys.path中,系统无法默认的找到您的脚本文件,通过以下命令可以解决该问题: >>> import sys>>> sys.path.a ...
- 证明解析函数u=c1 与 v=c2 正交
方程u(x,y)=c1对应平面上的曲线, 求导dy/dx= -ux/uy 类似有v曲线的dy/dx=-vx/vy 两者相乘,使用柯西-黎曼方程结果是-1 表示在相交点两者的切线互相垂直. 另 ...
- KindEditor4.x整合教程-Xproer.WordPaster
1.1. 集成到KindEditor4.x 主要步骤如下: 1.上传插件文件夹 2.上传WordPaster文件夹 3.在引用页面为KindEditor增加插件按钮 <html xmlns= ...
- C++对象模型:成员变量<一>非静态成员变量
非静态成员变量,分别两种可能,要么类自定义,要么继承而来.根据<深度探索C++对象模型>的解读. class X { private: int x,y,z; }; 在这个类中,有三个私有成 ...
- Ng第一课:引言(Introduction)
Machine Learning(机器学习)是研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能. 它是人工智能的核心,是使计算机具有智能的根本 ...
- linux下的各个目录(待填)
/系统目录 / 下的目录: 1./bin(binary,二进制文件):打开里面会发现全是绿色的文件,也就是可执行文件,而且名字都是系统命令的名字,其实每个系统命令都是一个小的可执行的文件,这些命令都存 ...
- POJ3273--Monthly Expense(Binary Search)
Description Farmer John is an astounding accounting wizard and has realized he might run out of mone ...