Android で「指定された子にはすでに親がいます」というエラーが表示されるのはなぜですか?

DDD
リリース: 2024-10-30 13:51:27
オリジナル
294 人が閲覧しました

Why Am I Getting

エラー: 指定された子にはすでに親がいます (Android)

問題:

2 つのレイアウトを頻繁に切り替えると、次のエラーが発生します:

FATAL EXCEPTION: main
java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
ログイン後にコピー

コード スニペット:

<code class="java">tv = new TextView(getApplicationContext()); // initialized elsewhere
et = new EditText(getApplicationContext()); // initialized elsewhere

private void ConsoleWindow() {
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            // MY LAYOUT:
            setContentView(R.layout.activity_console);
            // LINEAR LAYOUT
            LinearLayout layout = new LinearLayout(getApplicationContext());
            layout.setOrientation(LinearLayout.VERTICAL);
            setContentView(layout);

            // TEXTVIEW
            layout.addView(tv); // ERROR IN THIS LINE DURING 2ND RUN
            // EDITTEXT
            et.setHint("Enter Command");
            layout.addView(et);
        }
    });
}</code>
ログイン後にコピー

解決策:

エラー メッセージは、新しいレイアウトに追加する前に、現在の親から子 (TextView) を削除することを提案しています。

layout.addView(tv);:

<code class="java">if (tv.getParent() != null) {
    ((ViewGroup) tv.getParent()).removeView(tv); // Fix
}</code>
ログイン後にコピー
これにより、TextView が新しいレイアウトに追加される前に既存の親から適切に削除され、指定された親の競合が防止されます。

以上がAndroid で「指定された子にはすでに親がいます」というエラーが表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!