私はこのエラーについて質問する何十もの質問があることを知っていますが、提案された解決策のどれも私の問題には当てはまりません。ここでAndroid - 指定した子にはすでに親があります。最初に子供の親のremoveView()を呼び出す必要があります
は私のログです:ここで
java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
at android.view.ViewGroup.addViewInner(ViewGroup.java:1976)
at android.view.ViewGroup.addView(ViewGroup.java:1871)
at android.view.ViewGroup.addView(ViewGroup.java:1851)
at com.android.internal.app.AlertController.setupView(AlertController.java:365)
at com.android.internal.app.AlertController.installContent(AlertController.java:206)
at android.app.AlertDialog.onCreate(AlertDialog.java:251)
at android.app.Dialog.dispatchOnCreate(Dialog.java:307)
at android.app.Dialog.show(Dialog.java:225)
at com.company.MyApp.MyActivity$7.onItemClick(MyActivity.java:240)
at android.widget.AdapterView.performItemClick(AdapterView.java:284)
at android.widget.ListView.performItemClick(ListView.java:3513)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:1812)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3683)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
at dalvik.system.NativeStart.main(Native Method)
はMyActivity.javaのonCreate(です)。ダイアログビルダが表示され、いくつかの値が与えられていることがわかります。特定のボタンが私の活動にクリックされたときにmyDialogLayout
とmyDialogBuilder
どちらも、プライベートクラスのメンバーである
@Override
public void onCreate(Bundle savedInstanceState)
{
// ... a bunch of init code...
// Create a dialog builder
myDialogLayout = getLayoutInflater().inflate(R.layout.leaving, null);
myDialogBuilder = new AlertDialog.Builder(this)
.setTitle("My Title")
.setView(myDialogLayout)
.setNegativeButton("Cancel", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int which) {}
});
// ... more code ...
}
その後、myDialogBuilder
は少しカスタマイズされて、その後、ダイアログが作成され、示されています。 myDialog
は、プライベートクラス変数/メンバです:
// Builder customized a bit
myDialogBuilder
.setMessage("custom message here");
// Dialog created from Builder
myDialog = myDialogBuilder.create();
// Dialog shown
myDialog.show(); // <---- MyActivity.java Line: 240
だから、私の問題に、私は私のボタンをクリックすると、ダイアログが正常に作成されます。しかし、ダイアログのキャンセルを押してからもう一度ボタンを押すと、ログにエラーが表示されます。何らかの理由で、このアクティビティで私のmyDialog
ダイアログを再利用したくありません。これはクラスメンバーなので、onClick
ハンドラからアクセスできます。 myDialog
は毎回myDialogBuilder.create()
によって最初から作成されているため、ボタンをクリックするたびに新しいダイアログが表示されます。
誰でも問題が分かっていますか?キャンセルボタンが押されても差をつけなかったとき、私はmyDialog.dismiss()
に追加しようとしました。
また、私のmyDialogBuilder
では、カスタムXMLレイアウトがDialogのビューに使用されていることがわかります。エラーメッセージによると、それは私がremoveView()
を使用して、ダイアログ内でビューを使用しないようにしたいと思ったようです。しかし、myDialogBuilder.removeView()
は有効な方法ではありません。
これが鍵です。'myDialogLayout'をクラスメンバ変数から削除し、代わりに' onClick'ハンドラメソッドに対してローカルにしました。それは毎回膨らんだ新しいレイアウトです。ありがとう! –