1. 程式人生 > >解決Dialog在第二次開啟時報錯的問題

解決Dialog在第二次開啟時報錯的問題

Dialog第二次開啟報錯是出現在自定義的Dialog中,Dialog在被第二次開啟的時候其試圖已經存在,而你再次開啟它,Dialog會認為此檢視已有了父容器而你還要為人家新增一個父容器,這樣Dialog肯定不同意呀。

解決方法一:
在每次Show的時候,都重新LayoutInflater一次然後再次為Dialog設定setView,這樣就好了。

程式碼(這裡貼出一部分程式碼):

 view = LayoutInflater.from(mActivity).inflate(R.layout.edit_dialog, null);
        editText = (EditText) view.findViewById
(R.id.dialog_edit); builder.setView(view); builder.show();

在你顯示Dialog的地方寫這些程式碼

解決方法二:
我相信大家在使用自定義dialog時用的都是AlertDialog.Builder,然後使用builder.setView()來實現自定義Dialog的吧,如果要顯示就呼叫builder.show();
如果要取消顯示的話,builder是沒有dismiss()方法的,但是builder.show()方法返回一個dialog物件,你可以使用這個物件去呼叫dismiss()方法。

我以前也是這麼做的,這樣做導致你第二次呼叫builder.show()程式崩掉,而我們要解決這一現象也很簡單,方法就是我們不要用builder.show(),而是使用dialog.show(),在這裡可能有人疑惑了,dialog這個物件不是在builder.show()之後才有的嗎。

你以為只有這一個方法獲取dialog物件嗎,其實不是的:

//這個方法也會返回一個dialog物件
dialog = builder.create();

所以我們要使用這個dialog物件去show()和dismiss(),這樣就不會導致程式蹦掉了,我也感覺這才是AlertDialog.Builder的正確使用方法。

PS:推介使用第二種方法解決你的Dialog第二次開啟時崩潰的問題。

筆記寫完了,希望能對大家有點幫助。

相關推薦

解決Dialog第二開啟時報的問題

Dialog第二次開啟報錯是出現在自定義的Dialog中,Dialog在被第二次開啟的時候其試圖已經存在,而你再次開啟它,Dialog會認為此檢視已有了父容器而你還要為人家新增一個父容器,這樣Dialog肯定不同意呀。 解決方法一: 在每次Show的

關於多個Fragment切換,退出整個應用(APP)後,第二開啟應用的報解決

第二次開啟APP的時候,fragment事物的.commit()或者 在退出整個應用的那個Activity,如HomeActivity的重寫回退事件onBackPressed()裡面寫上android.os.Process.killProcess(android.os.

Source Insight 3.5 工程打不開(開啟時報)問題的解決--自己也遇到的問題

這是第二次使用Source Insight3.5,之所以說是第二次,是因為之前有幾天不愉快的使用經歷——關閉後的專案打不開,每次都是報錯後退出。以為是安裝或版本的問題。為了閱讀程式碼方便,隔了近兩個月再次使用,一直正常,直到想開啟前面建立的工程時問題再次出現。嘗試了好多方

關於eclipse依賴其他專案第一依賴顯示成功,第二開啟就變紅叉的情況解決方案

近來由於工作需求,不能使用android studio來開發Android Design Support Library 中的新控制元件,只能使用eclipse開發,以NavigationView 的引用為例,要在eclipse中使用NavigationView 需要新增v

為什麽jdbc中的resultset只能取一第二就報

port 範圍 popu epo test span locked inf png 引用 6 樓 的回復: 好吧各位,應該寫getInt(1)但是我要問的是為什麽第二次用會出錯 啊,好古老的一個問題。。。第二次出錯的原因,是因為你創建Statement的時候,

開啟一個程式,如果第二開啟則自動將第一個程式顯示到桌面

using System;using System.Collections.Generic;using System.Windows.Forms;using System.Runtime.InteropServices;using System.Diagnostics;using System.Refl

phpstudy開啟時報:丟失MSVCR110.dll

  之前一直在用php7.2的版本,最近由於專案需要,就切換成5.6版本,但是開啟時報錯丟失MSVCR110.dll檔案 附圖: 就是缺少這樣的dll檔案,是沒有安裝Visual C++ Redistributable for Visual Studio 2012 所以我們就要去下載,下

DB2資料庫表空間異常解決辦法(load資料庫時報,)

解決辦法:即就是需要空備資料,按下面執行方法執行:  1.連線資料庫: db2 connect to xdhsdb  2.查看錶空間狀態: db2 list tablespaces show det

Android 自定義相機第二開啟卡死

原因:相機沒有被正確釋放導致第二次打卡死。 //正確的釋放資原始碼 public void release(){ if (mCamera != null) { mCamera.setPreviewCallback(null) ;

Mac VMware Fusion 開啟時報 "打不開/dev/vmmon"

和HAXM或者docker衝突,解決辦法: 1. sudo rm -rf /System/Library/Extensions/vmmon.kext ,根據提示輸入管理員密碼; 2. sudo cp -pR /Applications/VMware\ Fusion.app

Ueditor富編輯器第二開啟的時候會渲染失敗

1、在頁面或視窗關閉的時候,通過監聽頁面或視窗事件,在函式裡面銷燬富編輯器 if(typeof(UE.getEditor("newsContentAdd")) !='undefined'){          UE.getEditor("newsContentAdd"

android 異常問題 Scrollview中巢狀webview出現大面積空白(第二開啟同一個地址下面才出現空白)

考慮到可能是因為有快取的原因,在每次開啟呼叫webview的時候,對其進行了快取清理操作 //下面程式碼用來解決Scrollview中巢狀webview導致下面大片空白的問題 4.0以上不起作用 webSettings.setLayoutAlgorithm(Web

Edittext不可編輯可點選 & 解決Edittext第二點選才有效

問題1:Edittext不可編輯可點選 1、Edittext在新的api裡已經把editable功能標記deprecated。 2、但是如果設定enabled為false的話,點選事件也無效了。 解決1:設定focusable方法 哎,之前因為android studio的

android應用activity第一進入正常第二進入報

         在android 開發中工作中遇到一個問題,第一次進入應用,正常退出,若採用finish(),則第二次進入時候,程式出現如下錯誤(程式碼中有serversocket) 若是退出時在finish(),之後在繼續呼叫system.exit(0),則第二次進入

每次重啟伺服器tomcat開啟時報

Jul 03, 2017 11:24:03 AM org.apache.catalina.core.StandardServer await SEVERE: StandardServer.await: create[8005]:  java.net.BindException: Address already

同一個Thread啟動第二會報java.lang.IllegalThreadStateException

先實現Thread程式碼 public class TestThread { public static void main(String[] args) { for (

解決mysql資料庫新增資料時報:1366

中文資料提交到mysql資料時報了個錯誤: Warning Code : 1366 Incorrect string value: '\xE5\x9C\xA8' for column 'conten

解決Navicat連接Oracle時報ORA-28547

裏的 ntc alt pro nbsp acl 分享圖片 tcl avi 1:ORA-28547 原因:navicate Primium版本的OCi和本地數據庫的OCI版本不一致。 解決方法: 1:把navicate Primium版本自帶oci.dll替換本地O

element-ui + el-dialog + Vue.component 註冊的富文字控制元件 第二及以後開啟dialog出現問題解決方法

自定控制元件 新增屬性  v-if="dialogVisible" <el-dialog title="" :visible.sync="dialogVisible" :append-to-body="true"> <my-editor v-model="

IE 下使用window.open() 開啟同一頁面,第二的時候不自動跳轉解決方法

解決方法 定義一個全域性變數記錄window.open()開啟的窗體 如過該變數被記錄過,則先關閉該視窗,然後再次開啟新視窗即可 eg: /*記錄當前開啟的窗體/ var showDocContentWindow; function showCivilD