Bagaimana Cara Mendapatkan Layout Inflater Diberikan Konteks?

226

Saya sedang menulis implementasi kustom dari ListAdapter.

Dalam konstruktornya, saya menerima Context, ID sumber daya (yaitu R.id.xxx yang mewakili file tata letak), dan daftar serta peta (ini berisi data).

Sekarang, masalahnya adalah bahwa saya akan memerlukan LayoutInflater untuk mendapatkan objek View yang ada di file XML layout terpisah.

Bagaimana saya bisa mendapatkan LayoutInflater hanya diberikan Konteks?

Sekarang, mengapa saya pikir ini mungkin, adalah bahwa ini sangat mirip dengan apa yang diteruskan ke konstruktor dari ArrayAdapter (konteks, sumber daya, textViewResourceId, array data), dan saya pikir ArrayAdapter juga harus menggunakan sebuah LayoutInflater hanya diberi Konteks.

Tetapi bagaimana itu bisa dilakukan?

Edwin Lee
sumber

Jawaban:

515

Anda dapat menggunakan static from()metode dari LayoutInflaterkelas :

 LayoutInflater li = LayoutInflater.from(context);
Dave Webb
sumber
11
Terima kasih! saya mencoba menemukan Context.getSomething (). getAnotherThing (). getLayoutInflater ()!
Edwin Lee
Ini adalah satu-satunya metode yang bekerja untuk saya. Setiap satu yang saya coba sejauh ini melemparkan pengecualian.
num1
4
Apakah mahal untuk mendapatkan inflater setiap kali diperlukan, artinya, apakah Anda pikir kami harus menyelamatkan anggota inflater?
AlikElzin-kilaka
BTW saya pikir kita harus menggunakan LayoutInflater li = (LayoutInflater) context.getSystemService (Konteks.LAYOUT_INFLATER_SERVICE) sebagai akhirnya LayoutInflater.from (konteks) melakukan hal yang sama di dalam.
Ankur Chaudhary
3
Mana yang lebih baik ?? satu dengan 270 suara atau satu dengan 25+ suara
DJphy
53

Anda juga dapat menggunakan kode ini untuk mendapatkan LayoutInflater:

LayoutInflater li = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE)
NguyenDat
sumber
40
Apa perbedaan antara LayoutInflater.from (Konteks ctx) dan getSustemService ini (...)?
Teo Choong Ping
8
+1, untuk pertanyaan yang menyenangkan, dalam mengimplementasikan metode LayoutInflater.from (konteks) juga panggil context.getSystemService () untuk mendapatkan Penyedia Layanan LayoutInflater dari System Manager. Jadi mungkin ada perbedaan serasah dalam tumpukan panggilan.
NguyenDat
11
LayoutInflater.from (konteks) juga melempar kesalahan jika inflater tidak dapat dilihat kembali: di sini kode: LayoutInflater public static dari (Konteks konteks) {LayoutInflater LayoutInflater = (LayoutInflater) context.getSystemService (Konteks.LAYOUT_INFLATER_SERVICE); if (LayoutInflater == null) {lempar AssertionError baru ("LayoutInflater tidak ditemukan."); } mengembalikan LayoutInflater; }
Hiep