安卓Dialog对话框多次显示而闪退的解决办法
事情是這樣子的,我在一個活動中自定義了一個AlertDialog,通過一個按鈕點擊即可彈出,而后來出現(xiàn)的情況是,第一次點擊就沒問題,
正常跳出,而第二次就直接程序閃退,然后報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() {@Overridepublic 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() {@Overridepublic void onClick(DialogInterface dialog, int which) {}}).create();setTheOrder.show();?
再來看這個錯誤,字面意思呢,就是說這個特定的child已經(jīng)有了一個父布局,必須移除這個布局,才能繼續(xù)你的內(nèi)容,經(jīng)過一番查找,一個子類View,要使用必須依賴于父類View,如果要使用子類的View,必須先調(diào)用父類的removeView的方法才能保證子類的使用(不知道表述的對不對,錯了煩請大佬們指正)
好了,既然大概的思路有了,我們先得得到一個父類對象,我找到兩個解決辦法,
第一
通過活動的onCreate方法里面setContentView里面那個布局,調(diào)用
LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);LinearLayout parent = (LinearLayout) inflater.inflate(R.layout.order_layout, null);這兩個方法得到父類對象,然后使用完這個Dialog之后,調(diào)用removeAllViews,在上面AlertDialog的兩個button里面的最后,調(diào)用這個方法
final AlertDialog setTheOrder = new AlertDialog.Builder(Passenger.this).setView(parent).setPositiveButton("確定", new DialogInterface.OnClickListener() {@Overridepublic 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() {@Overridepublic void onClick(DialogInterface dialog, int which) {parent.removeAllViews();}}).create();setTheOrder.show();我這里是規(guī)定了只能點這兩個按鈕才能結(jié)束這個Dialog,其實如果設(shè)置了點擊Dialog之外的屏幕區(qū)域也可以退出Dialog的話,在相應(yīng)的方法里面也要調(diào)用
?
第二,報這個錯誤的原因是因為本來的視圖有一個View,而你重新顯示的時候,相當于重新給他添加一個View(因為Dialog生成的時候執(zhí)行了setView這個函數(shù)),這時就會報錯,所以,粗暴一點的解決辦法就是在緊接著Dialog前面將View重新加載,相當于每次都重新生成一個新的對象,這樣便不會報錯
轉(zhuǎn)載于:https://www.cnblogs.com/Yintianhao/p/9461979.html
總結(jié)
以上是生活随笔為你收集整理的安卓Dialog对话框多次显示而闪退的解决办法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GoJS v1.8.27 去水印方法
- 下一篇: luogu1991 无线通讯网