ViewBinding - bagaimana cara mendapatkan binding untuk tata letak yang disertakan?
11
Saat bekerja dengan ViewBinding saya menemukan beberapa kasus yang tidak terdokumentasi.
Pertama: Cara mendapatkan penjilidan untuk bagian tata letak tampilan generik yang disertakan, penjilidan utama hanya melihat item di tata letak utama?
Kedua: Cara mendapatkan penjilidan untuk bagian tata letak jenis gabungan yang disertakan, sekali lagi penjilidan utama hanya melihat item di tata letak utama?
Sertakan dengan tata letak umum (bukan penggabungan simpul), kita perlu menetapkan ID untuk memasukkan bagian, dengan cara ini dalam mengikat kita akan memiliki akses ke sub bagian yang disertakan
private lateinit var exampleBinding:ActivityExampleBinding//activity_example.xml layoutoverride fun onCreate(savedInstanceState:Bundle?){super.onCreate(savedInstanceState)
exampleBinding =ActivityExampleBinding.inflate(layoutInflater)
setContentView(exampleBinding.root)//we will be able to access included layouts view like this
val includedView:View= exampleBinding.yourId.idOfIncludedView
//[...]}
Sertakan dengan blok gabung dalam tata letak eksternal. Kami tidak dapat menambahkan ID ke dalamnya karena blok gabungan bukan tampilan. Katakanlah kita memiliki tata letak gabungan abadi (merge_layout.xm):
Untuk mengikat tata letak gabungan dengan benar, kita perlu:
Dalam kode aktivitas Anda:
private lateinit var exampleBinding:ActivityExampleBinding//activity_example.xml layoutprivate lateinit var mergeBinding:MergeLayoutBinding//merge_layout.xml layoutoverride fun onCreate(savedInstanceState:Bundle?){super.onCreate(savedInstanceState)
exampleBinding =ActivityExampleBinding.inflate(layoutInflater)//we need to bind the root layout with our binder for external layout
mergeBinding =MergeLayoutBinding.bind(exampleBinding.root)
setContentView(exampleBinding.root)//we will be able to access included in merge layout views like this
val mergedView:View= mergeBinding.someView
//[...]}
Jawaban yang sangat sederhana dan menggunakan sintaks baru - semuanya bekerja untuk saya dalam Aktivitas non-Fragmen dengan sintaksis serupa di onCreate(). Terima kasih. (Hanya mengalami sedikit kesulitan menggunakan untuk a DrawerLayout)
Fat Monk
0
Cara sederhana lainnya adalah menggunakan pustaka data yang mengikat. Kemudian bungkus tata letak XML Anda dengan tag sehingga jika Anda menggunakan pustaka secara otomatis menghasilkan kelas yang diperlukan untuk mengikat tampilan di tata letak dengan objek data Anda. Jujur, saya pikir itu cara untuk pergi. Ikuti panduannya di sini
Pertanyaan pertama Anda, yaitu bekerja dengan tata letak yang disertakan menggunakan ViewBinding dapat diselesaikan dengan mudah.
Berikut ini contoh file main_fragment.xml
Dan MainFragment.java bisa seperti ini
Sekarang, Anda memiliki dua ikatan. salah satunya adalah default dan yang berikutnya adalah dari tata letak yang disertakan.
sumber
onCreate()
. Terima kasih. (Hanya mengalami sedikit kesulitan menggunakan untuk aDrawerLayout
)Cara sederhana lainnya adalah menggunakan pustaka data yang mengikat. Kemudian bungkus tata letak XML Anda dengan tag sehingga jika Anda menggunakan pustaka secara otomatis menghasilkan kelas yang diperlukan untuk mengikat tampilan di tata letak dengan objek data Anda. Jujur, saya pikir itu cara untuk pergi. Ikuti panduannya di sini
sumber