Bağlam Verilen Bir Düzen Şişirme Nasıl Gidilir?


227

Özel bir ListAdapter uygulaması yazıyorum.

Yapıcısında, bir Bağlam, bir kaynak kimliği (mizanpaj dosyasını temsil eden R.id.xxx) ve bir liste ve bir harita (bunlar verileri içerir) alıyorum.

Şimdi, sorun ayrı düzen XML dosyasında olan View nesnesini almak için bir LayoutInflater gerekir olmasıdır.

Yalnızca Bağlam verilen LayoutInflater'ı nasıl edinebilirim?

Şimdi, bunun mümkün olduğunu düşünüyorum, bu bir ArrayAdapter (bağlam, kaynak, textViewResourceId, veri dizisi) yapıcısına geçirilene oldukça benzer ve ArrayAdapter da bir LayoutInflater yalnızca bir Bağlam verdi.

Ama nasıl yapılabilir?

Yanıtlar:


516

Sen kullanabilirsiniz static from()gelen yöntemi LayoutInflatersınıfının :

 LayoutInflater li = LayoutInflater.from(context);

11
Teşekkürler! Context.getSomething (). getAnotherThing (). getLayoutInflater () bulmaya çalışıyordum!
Edwin Lee

Benim için işe yarayan tek yöntem bu. Şimdiye kadar denediğim her biri bir istisna attı.
num1

4
Her ihtiyaç duyulduğunda şişiriciyi almak pahalı mıdır, yani şişiricinin bir üyesini kurtarmamız gerektiğini mi düşünüyorsunuz?
AlikElzin-kilaka

BTW, LayoutInflater li = (LayoutInflater) context.getSystemService (Context.LAYOUT_INFLATER_SERVICE) nihayetinde LayoutInflater.from (context) 'in içinde aynı işi yapması gerektiğini düşünüyorum.
Ankur Chaudhary

3
Hangisi daha iyi ?? 270 oyu olan veya 25+ oyu olan
DJphy

53

Bu kodu LayoutInflater'ı almak için de kullanabilirsiniz:

LayoutInflater li = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE)

40
LayoutInflater.from (Context ctx) ve bu getSustemService (...) arasındaki fark nedir?
Teo Choong Ping

8
+1, güzel bir soru için, LayoutInflater.from (context) yönteminin uygulanmasında, Sistem Yöneticisi'nden LayoutInflater Servis Sağlayıcısı almak için context.getSystemService () öğesini de arayın. Yani çağrı yığınında bir çöp farkı olabilir.
NguyenDat

11
Eğer şişirici tekrar alınamazsa LayoutInflater.from (context) hata verir: burada kod: public static LayoutInflater from (Context context) {LayoutInflater LayoutInflater = (LayoutInflater) context.getSystemService (Context.LAYOUT_INFLATER_SERVICE); if (LayoutInflater == null) {yeni AssertionError atın ("LayoutInflater bulunamadı.)); } dönüş LayoutInflater; }
Hiep
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.