Soru AlertDialog tarafından kullanılması için görünümü şişirirken “Görünüm kökü olarak null iletmekten kaçının” uyarısı


Lint uyarısını alıyorum. Avoid passing null as the view root görünümleri şişirirken null gibi parent, sevmek:

LayoutInflater.from(context).inflate(R.layout.dialog_edit, null);

Ancak, görünüm bir içerik olarak kullanılacak. AlertDialogkullanarak setView üzerinde AlertDialog.Builderbu yüzden neyin geçilmesi gerektiğini bilmiyorum parent.

Ne düşünüyorsun parent bu durumda olmalı?


87
2017-10-16 12:51


Menşei


Null yerine false geçir. görmek bu - ashutiwari4
Null yerine size ebeveyn mizanpajı vermeyi deneyin ve setView'i kullanmayın. - Haresh Chhelana
Yöntem için tiftik uyarısını bastırıyorum. Henüz geçmemem için iyi bir sebep görmedim. null. - 323go
Ana görünüme bağlı olarak düzen sorununu anlıyorum, ancak bu aslında Activity'ın görünüm hiyerarşisinin üzerinde yüzen bir AlertDialog için geçerli değildir. Bu yüzden geçebilirsin null. Tüyleri bastırabilmen için bir sebep var. Lint'in sık sık kaçırılan sorunlar için size uyarı vermesi gerekiyor; bu durumda, doğru bir çağrıdır. - 323go
@ ashutiwari4 Her gün yeni yeni şeyler öğreniyorum .. güzel dünya: I - Rahul


Cevaplar:


İletişim penceresini uyarı olmadan şişirmek için bu kodu kullanın:

View.inflate(context, R.layout.dialog_edit, null);

134
2017-10-27 20:21



"Bu kodu kullan" neden? - Marian Paździoch
@ MarianPaździoch Çünkü bir uyarı vermiyor. :-) Tabii ki, bu, tılsım kodunun niçin davrandığının sorusuyla dolu. View.inflateve LayoutInflator.inflate farklı. Kesin bir cevap görmedim. Aynı görüşü şişirmek için iki görünüşte eşdeğer yolun neden olduğu ile ilgili olabilir, bunun için de bir gerekçe görmedim. - Edward Brey
Bu yanlış. Sadece uyarıyı bastırır, ancak sorun hala var. okumak possiblemobile.com/2013/05/layout-inflation-as-intended daha iyi bir çözüm için. - jcsahnwaldt
@JonaChristopherSahnwaldt Detaylandırır mısınız? Makale, AlertDialog'un bir null ebeveyni olması gerektiğini çünkü bir kök görünümünün olmadığını söylüyor. Bana göre uyarının bir diyalog dışındaki görünümler için anlamlı olduğunu, ancak bir diyalog görüntüsü için geçerli olmadığını pekiştiriyor gibi görünüyor. - Edward Brey
@EdwardBrey Haklısınız - Makaleyi iyice okumuştum. Bu durumda, ya kullanmak için Tamam View.inflate(...null) veya @SuppressLint. Genel olarak, LayoutInflater.from(...).inflate(..., parent, false) daha iyi. Bunu işaretlediğiniz için teşekkürler! - jcsahnwaldt


Kısa hikaye, diyalog için bir manzarayı şişirirken, parent Enflasyonu Görüntüle zamanında bilinmediği için null olmalıdır. Bu durumda, uyarıdan kaçınmak için üç temel çözümünüz var:

  1. @Suppress kullanarak uyarıyı bastır
  2. Görünümü kullanarak Görünümü şişirmek şişirme yöntemi. Bu sadece bir LayoutInflater'in etrafındaki bir sarıcıdır ve çoğunlukla sorunu gizler.
  3. LayoutInflater'ları kullanarak Görünümü şişir tam yöntem: inflate(int resource, ViewGroup root, boolean attachToRoot). Set attachToRoot için falseBu, ebeveynin müsait olmadığını bildirir. Android Lint'in eski sürümlerinde, bu uyarıyı kaldırdı. Bu artık Android Studio'nun 1.0 sürümünde geçerli değil.

Çıkış yapmak http://www.doubleencore.com/2013/05/layout-inflation-as-intended/ Bu konunun büyük bir tartışması için, özellikle de "Her Kuralın Bir İstisnası Var" bölümü.


25
2017-10-27 20:42





ViewGroup olarak null casting uyarısını çözdü:

View dialogView = li.inflate(R.layout.input_layout,(ViewGroup)null);

nerede li öyle mi LayoutInflater's nesne.


16
2017-11-03 21:14



'li' LayoutInflater nesnesidir. - SVL Narasimham
Bu cevap en iyisidir, anlamanızı sağlamanız NEDEN aslında bunu yapıyorsunuz. Kısa hikaye, daha önce okuduğunuz gibi, AlertDialog'un ebeveynini şişirme zamanında bilmemesi ve bu yüzden doğru şeyi yaptığınızda, bu hassas durumda bir uyarı vermesi yan etkidir. - Mar Bar
Bu uyarıyla ilgili sayısız cevapları ve sayfaları okudum, ancak çözümünüz şu ana kadarki en iyisi: basit ve zarif - Couitchy
Ama gereksiz döküm - mohit
Daha sonra "Döküm gereksiz" bir uyarı daha alırız! - Mousa


Kullanmalısın AlertDialog.Builder.setView(your_layout_id)Yani şişirmek zorunda değilsin.

kullanım AlertDialog.findViewById(your_view_id) iletişim oluşturduktan sonra.

kullanım (AlertDialog) dialogInterface almak için dialog içinde OnClickListener ve sonra dialog.findViewById(your_view_id).


11
2017-11-24 08:49



Bu gitmek için yol! Sadece iletişim kutusunu oluşturup görünümünüzü bulun. - user1806772
Bunu yapmanın iyi bir yolu, ancak şunu unutmayın yöntem API 21'e eklendi - Nicolás Carrasco
@ NicolásCarrasco o zaman destek kütüphaneleri hakkında hiçbir şey bilmiyorsunuz .. - user25


Gerçekten hiç yokken parent (örneğin, AlertDialog), geçmekten başka seçeneğiniz yok null. Bu yüzden uyarılardan kaçınmak için şunu yapın:

final ViewGroup nullParent = null;
convertView = infalInflater.inflate(R.layout.list_item, nullParent);

6
2018-06-11 08:54



Başka bir uyarı üretir "değer" nullParent 'her zaman boştur. " - mallaudin


Belirtmeniz gerekmez parent bir diyalog için.

Bunu kullanarak bastır @SuppressLint("InflateParams") geçersiz kılmanın en üstünde.


6
2018-03-06 21:27





Yerine yapmak

view = inflater.inflate(R.layout.list_item, null);

yap

view = inflater.inflate(R.layout.list_item, parent, false);

Verilen ebeveyn ile şişirir, ancak ebeveyne eklemez.

Katsayıya çok teşekkürler (onun yazı için bağlantı)


-1
2018-03-21 08:02



Bazen ebeveynimiz yok, değil mi? - JohnyTex