Menyelesaikan Masalah Ralat Android: "Anak Yang Ditentukan Sudah Mempunyai Ibu Bapa"
Apabila kerap bertukar antara reka letak, anda mungkin menghadapi ralat "The anak yang ditentukan sudah mempunyai ibu bapa Anda mesti memanggil removeView() pada ibu bapa kanak-kanak itu terlebih dahulu (Android). Ini berlaku apabila paparan, seperti TextView atau EditText, ditambahkan pada reka letak yang telah dilampirkan pada paparan kandungan aplikasi.
Sebagai contoh, pertimbangkan kod berikut di mana reka letak dibuat dan ditukar dengan kerap :
<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>
Masalah timbul apabila kaedah setContentView() dipanggil dua kali dengan reka letak yang berbeza. Kali pertama, tiada isu kerana susun atur LinearLayout ditambahkan pada paparan kandungan buat kali pertama. Walau bagaimanapun, semasa panggilan berikutnya ke setContentView(), susun atur LinearLayout masih mengandungi anak-anaknya (TextView dan EditText). Memandangkan objek LinearLayout sudah mempunyai induk (pandangan kandungan), menambahkannya sekali lagi akan menimbulkan ralat "Anak yang ditentukan sudah mempunyai ibu bapa".
Penyelesaian:
Penyelesaiannya adalah untuk mengalih keluar kanak-kanak (TextView dan EditText) daripada susun atur LinearLayout sebelum menambahkannya pada paparan kandungan untuk kali kedua. Berikut ialah kod yang diubah suai:
<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>
Dengan mengalih keluar kanak-kanak daripada ibu bapa terdahulu mereka sebelum menambahkan mereka pada susun atur LinearLayout baharu, anda memastikan bahawa mereka tidak dilampirkan pada berbilang ibu bapa secara serentak, menyelesaikan "Anak yang ditentukan sudah mempunyai ralat ibu bapa".
Atas ialah kandungan terperinci Mengapa Saya Mendapat Ralat \'Anak Yang Ditentukan Sudah Mempunyai Ibu Bapa\' dalam Android?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!