Saya memiliki tata letak untuk tampilan -
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="0px"
android:orientation="vertical">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/items_header"
style="@style/Home.ListHeader" />
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/items_none"
android:visibility="gone"
style="@style/TextBlock"
android:paddingLeft="6px" />
<ListView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/items_list" />
</LinearLayout>
Yang ingin saya lakukan, adalah kegiatan utama saya dengan tata letak seperti ini
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="0px"
android:id="@+id/item_wrapper">
</LinearLayout>
Saya ingin mengulang melalui model data saya dan menyuntikkan beberapa tampilan yang terdiri dari tata letak pertama ke tata letak utama. Saya tahu saya bisa melakukan ini dengan membangun kontrol sepenuhnya dalam kode, tetapi saya bertanya-tanya apakah ada cara untuk membangun pandangan secara dinamis sehingga saya dapat terus menggunakan tata letak alih-alih meletakkan segala sesuatu dalam kode.
Jawaban:
Gunakan
LayoutInflater
untuk membuat tampilan berdasarkan templat layout Anda, dan kemudian menyuntikkannya ke tampilan di mana Anda membutuhkannya.Anda mungkin harus menyesuaikan indeks tempat Anda ingin menyisipkan tampilan.
Selain itu, atur LayoutParams sesuai dengan keinginan Anda agar sesuai dengan tampilan induk. misalnya dengan
FILL_PARENT
, atauMATCH_PARENT
, dll.sumber
getLayoutInflater()
LayoutInflater vi = getLayoutInflater();
dari suatu aktivitas untuk melestarikan tema aktivitas yang tidak Anda dapatkan sebaliknya.Lihat
LayoutInflater
kelas.sumber
Sepertinya Anda benar-benar menginginkan ListView dengan adaptor khusus untuk mengembang tata letak yang ditentukan. Menggunakan ArrayAdapter dan metode yang
notifyDataSetChanged()
Anda punya kendali penuh atas pembuatan dan rendering Tampilan.Lihatlah tutorial ini
sumber
Untuk membuat jawaban @Mark Fisher lebih jelas, tampilan yang dimasukkan akan meningkat menjadi file xml di bawah folder layout tetapi tanpa layout (ViewGroup) seperti LinearLayout dll. Di dalamnya. Contoh saya:
res / layout / my_view.xml
Kemudian, titik penyisipan harus berupa tata letak seperti LinearLayout:
res / layout / activity_main.xml
Maka kodenya harus
Alasan saya memposting jawaban yang sangat mirip ini adalah bahwa ketika saya mencoba menerapkan solusi Mark, saya terjebak pada file xml apa yang harus saya gunakan untuk insert_point dan tampilan anak. Saya menggunakan tata letak di tampilan anak pertama dan itu benar-benar tidak berfungsi, yang saya butuh beberapa jam untuk mencari tahu. Jadi harap eksplorasi saya dapat menghemat waktu orang lain.
sumber
sumber