Android エラーのトラブルシューティング:「指定された子にはすでに親がいます」
レイアウトを頻繁に切り替えると、「指定された子にはすでに親があります。最初に子の親に対してremoveView()を呼び出す必要があります(Android)。」これは、TextView や EditText などのビューが、アプリケーションのコンテンツ ビューに既にアタッチされているレイアウトに追加されるときに発生します。
たとえば、レイアウトが作成され、頻繁に切り替えられる次のコードを考えてみましょう。 :
<code class="java">private void ConsoleWindow() { runOnUiThread(new Runnable() { @Override public void run() { // Create a new layout (LinearLayout). LinearLayout layout = new LinearLayout(getApplicationContext()); layout.setOrientation(LinearLayout.VERTICAL); // Add a TextView to the layout. layout.addView(tv); // Add an EditText to the layout. et.setHint("Enter Command"); layout.addView(et); // Set the content view to the new layout. setContentView(layout); } }); }</code>
この問題は、setContentView() メソッドが異なるレイアウトで 2 回呼び出された場合に発生します。初めて LinearLayout レイアウトがコンテンツ ビューに追加されるため、問題はありません。ただし、後続の setContentView() の呼び出し中、LinearLayout レイアウトには引き続きその子 (TextView および EditText) が含まれます。 LinearLayout オブジェクトにはすでに親 (コンテンツ ビュー) があるため、それを再度追加すると、「指定された子にはすでに親があります」というエラーがスローされます。
解決策:
解決策は、LinearLayout レイアウトをコンテンツ ビューに再度追加する前に、その子 (TextView と EditText) をそのレイアウトから削除することです。変更されたコードは次のとおりです。
<code class="java">private void ConsoleWindow() { runOnUiThread(new Runnable() { @Override public void run() { // Create a new layout (LinearLayout). LinearLayout layout = new LinearLayout(getApplicationContext()); layout.setOrientation(LinearLayout.VERTICAL); // Remove the TextView from its parent (if it has one). if (tv.getParent() != null) { ((ViewGroup) tv.getParent()).removeView(tv); } // Add the TextView to the layout. layout.addView(tv); // Remove the EditText from its parent (if it has one). if (et.getParent() != null) { ((ViewGroup) et.getParent()).removeView(et); } // Add the EditText to the layout. et.setHint("Enter Command"); layout.addView(et); // Set the content view to the new layout. setContentView(layout); } }); }</code>
新しい LinearLayout レイアウトに追加する前に、以前の親から子を削除することで、それらの子が複数の親に同時にアタッチされることがなくなり、「指定された子はすでに指定されています」というエラーが解決されます。親があります」エラー。
以上がAndroid で「指定された子にはすでに親がいます」というエラーが表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。