事情是这样子的,我在一个活动中自定义了一个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对话框多次显示而闪退的解决办法的更多相关文章

  1. windows10中git-bash闪退的解决办法

    windows10中git-bash闪退的解决办法 出现错误详情 Windows10 64位专业版安装git .18之后出现 Git闪退,报错信息:bash: /dev/null: No such d ...

  2. pyinstaller打包exe文件闪退的解决办法

    pyinstaller是python下目前能打包py文件为windows下的exe文件的一个非常友好易用的库!但是,小爬每次用pyinstaller打包时也总是遇到一些难题,有时网上搜了一圈,也没看到 ...

  3. Ubuntu使用MyEclipse闪退的解决办法

    修改myeclipse.ini文件, -Xmx512m-XX:MaxPermSize=512m-XX:ReservedCodeCacheSize=256m-Dosgi.nls.warnings=ign ...

  4. 关于ArcMap中打开ArcToolbox导致闪退的解决办法

    最近好久不用ArcGis的小编要用到ArcMap去发送一个GP服务,发现按照套路打开ArcMap点击ArcToolbox时,发生了ArcMap的闪退现象,几经周折终于解决了问题. 希望也遇到这类问题的 ...

  5. discuz2.5登录后台闪退的解决办法

    今天突然发现discuz2.5论坛后台进不去,开始以为密码错了,但发现登录后也是闪退.我试着清除浏览器cookie,也换了其他浏览器也没有用,还是上网找找吧! discuz2.5进入后台闪退的原因: ...

  6. 某些编辑器运行C程序闪退的解决办法

    在某些C语言编辑器中运行C语言程序或点击生成的.exe文件出现闪退现象的解决办法,主要有两种,还有其它方法欢迎交流. 包含头文件<windows.h>,在程序末尾添加system(&quo ...

  7. React Native 微信分享闪退的解决办法

    Android中编写微信分享功能时出现了闪退的现象,经过几番资料的查找,发现是应用签名的问题,解决办法如下: 1.    进入微信官网的开放平台--->资源中心---->资源下载----& ...

  8. android手机关于google play商店闪退的解决办法

    部分android手机没有安装google play商店,这个可以通过类似“机锋”.“360手机助手”等应用市场下载. 安装google play商店后,点击打开却一闪而过:这个问题是因为手机没有安装 ...

  9. Android SDK Manager 闪退的解决办法

    (一)方案一 原理:  SDK Manager.exe 通过调用 android-sdk-windows\tools\lib\find_java.bat 确认  java.exe 的路径 启用 cmd ...

随机推荐

  1. js中定时器相关

    每三秒(3000 毫秒)弹出 "Hello" : setInterval(function(){ alert("Hello"); }, 3000); setIn ...

  2. javaScript正则表达式的使用

    今天看了一个正则的写法,回想一下,对于正则都忘记得差不多了,称这个时间整理一下,收集了一些以前的资料和查看了一些别人的资料,做一个小小的总结,方便自己以后查看,也希望能帮助到大家!!   欢迎指正,欢 ...

  3. Educational Codeforces Round 51 D. Bicolorings(dp)

    https://codeforces.com/contest/1051/problem/D 题意 一个2*n的矩阵,你可以用黑白格子去填充他,求联通块数目等于k的方案数,答案%998244353. 思 ...

  4. ubuntu开启root登陆

    1.安装openssh-server 在终端中输入: sudo apt-get install openssh-server 2.启动 service ssh start 3.查看查看ssh服务是否启 ...

  5. python3 print函数的用法

    1. 输出字符串 >>> strHello = 'Hello World' >>> print (strHello) Hello World 2. 格式化输出整数 ...

  6. idea在相应的包下右键创建servlet,找不到servlet选项

    开始pom.xml文件里面我是只引进了个servlet包,但是右键依旧没有servlet选项 <dependency> <groupId>javax.servlet</g ...

  7. SpringBoot2.0.2 不使用parent作为maven单继承方式操作 : org.springframework.boot : spring-boot-dependencies : 2.0.2.RELEASE

    1.pom配置方式 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="h ...

  8. ERR_CACHE_MISS 上一页提示确认重新提交表单

    SITUATION: 设备搜索后,根据返回结果 list.php 进入特定设备的详细页面 one.php,但点击后退按钮(上一页)返回 list.php,会出现确认重新提交表单的错误页面 ERR_CA ...

  9. kettle之时间字段默认值为空或’0000-00-00’问题

    今天使用kettle从mysql导数到oracle,发现只导了7行后,数据传输就终止了,查看日志信息,报错如下: 报:Couldn't get row from result set问题. 发现从这行 ...

  10. 使用MyGeneration创建模板:介绍(翻译)

    原文信息 原文地址 原文作者信息: Justin Greenwood MyGeneration Software http://www.mygenerationsoftware.com April 2 ...