// //

カスタムAlertDialog生成時の例外回避


アイコンなど機能上のデザインの関係でカスタマイズしたListViewをAlertDialogにsetView()した際に、
java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.」
なるエラーが発生して詰まった。


AlertDialogやカスタマイズしたListViewと絡めて調べてみると、
エラー内容に書いてある通りにすでに子要素に対する親要素があるからremoveView()するべきと。
そうすると今度は「java.lang.UnsupportedOperationException: removeView(View) is not supported in AdapterView」に悩まされた。
さらに調べてnotifyDataSetChanged()とかasList使用による固定長Listの返し対策としてみたが、
いずれも自分に該当せず…


自分のはファイルダイアログとしてAlertDialogを利用。
選択した項目がディレクトリならば、さらに下層(該当ディレクトリ)の内容で再生成していた。
初回のAlertDialogは開くけどディレクトリを選択するとIllefgalStateExceptionが発生。
発生箇所は再生成時のshow()。(正直、最初は再生成のメソッド周りだと思ってた…)


で、引用元をやっと発見し、解決。
同一のダイアログを複数回表示する際にはcreate()してからshow()をし、以降はshow()のみとのこと。


非常に助かった…が、
これカスタムAlertDialogでなく普通のAlertDialog時にはなにも問題なく再表示できていたんだけど、
どうも引用元の感じだとカスタム関係なくっぽいんだけど…どうなんだろうか?

Qiita Androidで同一Dialogを2回表示する
http://qiita.com/ayakix/items/65cbabb540a20ae2ede4


Qiita登録するだけしといて使えてないけど、いつか入り込めるといいなー