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?

Jawaban:


515

Anda dapat menggunakan static from()metode dari LayoutInflaterkelas :

 LayoutInflater li = LayoutInflater.from(context);

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)

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.