Saya mendapatkan peringatan serat, Avoid passing null as the view root
ketika menggembungkan pandangan dengan null
sebagai parent
, seperti:
LayoutInflater.from(context).inflate(R.layout.dialog_edit, null);
Namun, tampilan akan digunakan sebagai konten dari AlertDialog
, gunakan setView
pada AlertDialog.Builder
, jadi saya tidak tahu apa yang harus dilewatkan sebagai parent
.
Menurut Anda apa yang parent
seharusnya dalam hal ini?
android
android-alertdialog
layout-inflater
Randy Sugianto 'Yuku'
sumber
sumber
null
.null
. Ada alasan mengapa Anda bisa menekan serat. Lint seharusnya memberi Anda peringatan untuk masalah yang sering tidak terjawab; dalam hal ini, itu permohonan yang benar.Jawaban:
Gunakan kode ini untuk mengembang tampilan dialog tanpa peringatan:
sumber
View.inflate
danLayoutInflator.inflate
berbeda. Saya belum melihat jawaban yang pasti. Ini mungkin terkait dengan mengapa ada dua cara yang tampaknya setara untuk mengembang pandangan yang sama, yang saya juga tidak melihat alasan.View.inflate(...null)
atau@SuppressLint
. Secara umum,LayoutInflater.from(...).inflate(..., parent, false)
lebih baik. Terima kasih telah menunjukkan ini!AlertDialog
, yang tidak menyediakan induk untuk tampilan yang meningkat. Saat menggembungkan tampilan root dari sebuahAlertDialog
, melewatkan null adalah benar. Lint tidak menjelaskan konteks khusus ini, jadi peringatan yang diberikannya jika Anda menggunakan fungsi yang mengambilparent
false positive, bukan indikasi kesalahan apa pun rawan. Itu sebabnya valid dalam hal ini untuk menggunakan fungsi yang tidak mengambilparent
dan tidak memicu peringatan.Ceritanya adalah bahwa ketika Anda menggelembungkan tampilan untuk dialog,
parent
harus nol, karena tidak diketahui pada waktu inflasi Lihat. Dalam hal ini, Anda memiliki tiga solusi dasar untuk menghindari peringatan:Mengembang View menggunakan LayoutInflater ini metode full :Di versi Android Lint yang lebih lama, ini menghapus peringatan. Ini tidak lagi berlaku di Android Studio versi 1.0.inflate(int resource, ViewGroup root, boolean attachToRoot)
. SetelattachToRoot
kefalse
.Ini memberitahu inflater bahwa induknya tidak tersedia.Lihat http://www.doubleencore.com/2013/05/layout-inflation-as-intended/ untuk diskusi hebat tentang masalah ini, khususnya bagian "Setiap Aturan Memiliki Pengecualian" di bagian akhir.
sumber
Casting nol saat ViewGroup menyelesaikan peringatan:
di mana
li
adalahLayoutInflater's
objek.sumber
Anda harus menggunakan
AlertDialog.Builder.setView(your_layout_id)
, jadi Anda tidak perlu mengembang.Gunakan
AlertDialog.findViewById(your_view_id)
setelah membuat dialog.Gunakan
(AlertDialog) dialogInterface
untuk mendapatkan bagiandialog
dalamOnClickListener
laludialog.findViewById(your_view_id)
.sumber
A
di mana ada metodeonCreateDialog
. Dalam yang terakhir, saya menulis seperti kata Andaalert_dialog_builder.setView(R.layout.edit_account_dialog);
. Tapi saya harus menyimpan tata letak yang meningkat ini dalamA
variabel atribut bernamathe_inflated_layout_of_the_dialog
.Anda tidak perlu menentukan
parent
dialog.Menekan penggunaan ini
@SuppressLint("InflateParams")
di bagian atas override.sumber
Ketika Anda benar-benar tidak punya
parent
(misalnya membuat tampilan untukAlertDialog
), Anda tidak punya pilihan lain selain melewatinull
. Jadi lakukan ini untuk menghindari peringatan:sumber
AlertDialog sejauh yang saya tahu satu-satunya kasus adalah Anda dapat menggunakan null dengan aman daripada tampilan induk. Dalam hal ini Anda dapat menekan peringatan dengan menggunakan:
@SuppressLint ("InflateParams")
Secara umum Anda tidak boleh menggunakan SupressLint atau salah satu solusi yang disebutkan dalam jawaban lain untuk menghilangkan peringatan. Tampilan induk diperlukan untuk mengevaluasi Layout Params yang dideklarasikan di elemen root dari View yang digelembungkan. Itu berarti jika Anda menggunakan null alih-alih tampilan induk, semua Layout Params di elemen root akan diabaikan dan diganti dengan Layout Params default. Sebagian besar waktu itu akan baik-baik saja, tetapi dalam beberapa kasus ini akan menghasilkan bug yang sangat sulit ditemukan.
sumber
Dari dokumentasi
View.inflate()
, katanyaMengembang tampilan dari sumber XML. Metode kenyamanan ini membungkus
LayoutInflater
kelas, yang menyediakan berbagai pilihan untuk melihat inflasi.sumber
Menurut https://developer.android.com/guide/topics/ui/dialogs
Oleh karena itu, untuk membuat AlertDialog, saya menggunakan
@SuppressLint("InflateParams")
sumber
Alih-alih melakukan
melakukan
Itu akan mengembang dengan orang tua yang diberikan, tetapi tidak akan melampirkannya ke orang tua.
Terima kasih banyak kepada Coeffect ( tautan ke posnya )
sumber