指定された子にはすでに親がいます。まず、その子の親に対して removeView() をコールする必要があります。
2022-02-17 13:48:31
ViewPage+Fragmentの縦横切り替えを行っているときに、エラーが出てしまい、解決に時間がかかってしまったので、以下のように記録しておくことにします。
指定された子にはすでに親がいます。まず、その子の親に対して removeView() をコールする必要があります。
エラーメッセージは以下の通りです。
IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3194)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3302)
at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:5368)
at android.app.ActivityThread.-wrap19(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1897)
at android.os.Handler.dispatchMessage(Handler.java:108)
at android.os.Looper.loop(Looper.java:166)
at android.app.ActivityThread.main(ActivityThread.java:7425)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921)
Caused by: 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:4976)
at android.view.ViewGroup.addView(ViewGroup.java:4807)
at androidx.viewpager.widget.ViewPager.addView(ViewPager.java:1485)
at android.view.ViewGroup.addView(ViewGroup.java:4747)
at android.view.ViewGroup.addView(ViewGroup.java:4720)
at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:326)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1356)
at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1434)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1497)
at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2625)
at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2577)
at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:247)
at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:541)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1339)
at android.app.Activity.performStart(Activity.java:7392)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3157)
... 10 more","40","0",
エラーの主な原因は、この文章です。
IllegalStateException: 指定された子には、すでに親がいます。最初にその子の親に対してremoveView()を呼び出す必要があります。
指定された子にはすでに親がいます。まず、その子の親に対して removeView() をコールする必要があります。
2つの解決策
1つ目 ビューの親クラスを取得し、その親クラスを削除します。
private View view;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
if (view == null) {
view = inflater.inflate(R.layout.message_center_fragment, container, false);
}
ViewGroup parent = (ViewGroup) view.getParent();
if (parent ! = null) { parent.
parent.removeView(view);
}
@Override
public void onDestroyView() {
super.onDestroyView();
if (view ! = null) {
ViewGroup parentView = (ViewGroup) view.getParent();
if (parentView ! = null) { parentView.
parentView.removeView(view);
}
}
}
しかし、この方法では
doesn't always work
2つ目の方法
フラグメントでは、依存するアクティビティーの
AndroidManifest.xml
設定項目を追加して
android:configChanges="orientation|keyboardHidden|screenSize" />
この設定項目が行うこと。 横画面と縦画面を切り替えたときに、アクティビティがonCreateメソッドを再呼び出さないようにしました。
動作確認済み
同じくこの問題に直面している方の参考になれば幸いです。
関連
-
RuntimeException: アクティビティを開始できません ComponentInfo solution
-
Android のパッケージングに失敗し、Android リソースのリンクに失敗したことを示すプロンプトが表示される
-
Android: インポートモジュールエラー Android リソースのリンクに失敗しました
-
android:EMSのプロパティ
-
Google PlayデバイスはPlay保護機構の認証を受けていません。
-
repo: コマンドが見つかりません
-
アンドロイドのエリプサイズを使用する
-
Android Bluetooth 開発の基本プロセス
-
android bluetooth--Bluetooth on、検索、ペアリング、接続
-
Android--shape--描画のコーナー、グラデーション、パディング、サイズ、ソリッド、ストロークのプロパティを指定する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
adb devices OffLine Solution(オフラインソリューション
-
Gradle の同期に失敗しました。com.android.tools.build:gradle が見つかりませんでした。
-
AndroidがMainActivityが包含クラスでないというエラーを報告する
-
最新のandroidプロジェクトディレクトリにあるarmeabi-v7aとarmeabiの具体的な意味とその違いを教えてください。
-
Androidプロセス生存のためのソリューション
-
AndroidStudioのショートカット 検索/置換
-
Android Studioのgitの使用とgitの設定パス
-
Android.support.v7.widget.Toolbar が見つかりませんでした。
-
android.view.inflateexception 例外処理
-
android.viewの解決策です。