Saya harus sering beralih di antara dua tata letak. Kesalahan terjadi pada tata letak yang diposting di bawah ini.
Ketika tata letak saya disebut pertama kali, tidak ada kesalahan dan semuanya baik-baik saja. Ketika saya kemudian memanggil tata letak yang berbeda (yang kosong) dan kemudian memanggil tata letak saya untuk kedua kalinya, itu melempar kesalahan berikut:
> FATAL EXCEPTION: main
> java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
Lay-code saya terlihat seperti ini:
tv = new TextView(getApplicationContext()); // are initialized somewhere else
et = new EditText(getApplicationContext()); // in the code
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);
}
}
}
Saya tahu pertanyaan ini telah diajukan sebelumnya, tetapi itu tidak membantu dalam kasus saya.
java
android
android-edittext
textview
parent-child
blackst0ne
sumber
sumber
LinearLayout
tetapi Anda menambahkanTextView
. Jadi perbaiki.TranstitionManager.beginDelayedTransition
, silakan periksa jawabanJawaban:
Pesan kesalahan mengatakan apa yang harus Anda lakukan.
sumber
cukup berikan argumen attachtoroot sebagai false
sumber
attachToRoot
= salah, adalah jalan yang harus ditempuh.Saya datang ke sini untuk mencari kesalahan dengan recyclerview saya tetapi solusinya tidak bekerja (jelas). Saya telah menulis penyebab dan solusi untuknya dalam kasus recyclerview. Semoga ini bisa membantu seseorang.
Kesalahan ini disebabkan jika dalam
onCreateViewHolder()
metode berikut ini diikuti:Sebaliknya seharusnya
sumber
Saya mendapat pesan ini saat mencoba melakukan fragmen menggunakan attach to root to true, bukan false, seperti:
Setelah melakukan:
Itu berhasil.
sumber
Jika solusi lain tidak berfungsi seperti:
periksa apa yang Anda kembali dari onCreateView dari fragmen apakah itu tampilan tunggal atau grup tampilan? dalam kasus saya, saya punya viewpager pada root xml of fragment dan saya kembali viewpager, ketika saya menambahkan viewgroup dalam tata letak saya tidak memperbarui bahwa saya harus mengembalikan viewgroup sekarang, bukan viewpager (tampilan).
sumber
frameLayout.addView (bannerAdView); <----- jika Anda mendapatkan kesalahan pada baris ini, lakukan seperti di bawah ini ..
sumber
Kesalahan saya adalah mendefinisikan tampilan seperti ini:
Itu hilang:
sumber
Dalam kasus saya masalahnya disebabkan oleh fakta bahwa saya menggembungkan tampilan induk dengan
<merge>
tata letak. Dalam hal ini,addView()
menyebabkan crash.Menghapus
addView()
membantu memecahkan masalah.sumber
periksa apakah Anda sudah menambahkan tampilan
sumber
Kode di bawah ini menyelesaikannya untuk saya:
Catatan: Kesalahan berasal dari kelas fragmen saya dan dengan mengganti metode onDestroy seperti ini, saya bisa menyelesaikannya.
sumber
sumber
Dalam kasus saya itu terjadi ketika saya ingin menambahkan tampilan oleh orang tua ke tampilan lain
Anda harus menambahkan tampilan induk seperti ini
sumber
Anda harus terlebih dahulu menghapus tampilan anak dari induknya.
Jika proyek Anda berada di Kotlin, solusi Anda akan terlihat sedikit berbeda dari Java. Kotlin menyederhanakan casting dengan
as?
, mengembalikan nol jika sisi kiri adalah nol atau pemain gagal.Solusi Ekstensi Kotlin
Jika Anda perlu melakukan ini lebih dari sekali, tambahkan ekstensi ini untuk membuat kode Anda lebih mudah dibaca.
Dengan aman tidak akan melakukan apa pun jika Tampilan ini adalah nol, tampilan induk adalah nol, atau tampilan induk bukan merupakan ViewGroup
sumber
Saya menemukan perbaikan lain:
Di sini saya hanya memiliki pernyataan if memeriksa apakah tampilan memiliki orangtua dan jika tidak membuat dialog baru, mengatur contentView dan menampilkan dialog dalam metode "createAlgorithmDialog ()" saya.
Ini juga mengatur tombol positif dan negatif (tombol ok dan batal) dengan onClickListeners.
sumber
Anda dapat menggunakan metode ini untuk memeriksa apakah suatu pandangan memiliki anak atau tidak.
sumber
Kasus saya berbeda tampilan anak sudah memiliki tampilan induk saya menambahkan tampilan anak di dalam tampilan induk ke induk yang berbeda. contoh kode di bawah ini
Dan saya menggembungkan pandangan ini dan menambahkan ke LinearLayout lain, kemudian saya menghapus LinaarLayout dari tata letak di atas dan mulai bekerja
kode di bawah ini memperbaiki masalah:
sumber
Masalah saya terkait dengan banyak jawaban lain, tetapi alasan yang sedikit berbeda karena perlu melakukan perubahan ... Saya mencoba untuk mengubah suatu Kegiatan menjadi Fragmen. Jadi saya memindahkan kode mengembang dari onCreate ke onCreateView, tapi saya lupa untuk mengonversi dari setContentView ke metode mengembang, dan IllegalStateException yang sama membawa saya ke halaman ini.
Saya mengubah ini:
untuk ini:
Itu memecahkan masalah.
sumber