Diberi Tampilan, bagaimana saya bisa mendapatkan pandangan anak di dalamnya?
Jadi saya punya tampilan kustom dan debugger menunjukkan bahwa di bawah ini mChildren
ada 7 tampilan lainnya. Saya perlu cara untuk mengakses pandangan ini tetapi sepertinya tidak ada API publik untuk melakukan ini.
ada saran?
EDIT:
Tampilan kustom saya berasal dari AdapterView
viewGroup
Jika Anda tidak hanya ingin mendapatkan semua anak langsung tetapi semua anak-anak dan sebagainya, Anda harus melakukannya secara rekursif:
Untuk menggunakan hasilnya Anda bisa melakukan sesuatu seperti ini:
sumber
for (int i = 0, n = vg.getChildCount(); i < n; i++)
Di Android, mengakses variabel lokal alih-alih memanggil metode cenderung lebih cepat. Dengan cara ini, suatu metode dipanggil hanya satu kali per kelompok tampilan dan kemudian dijalankan berikutnya variabel lokal digunakan.Anda selalu dapat mengakses tampilan anak melalui View.findViewById () http://developer.android.com/reference/android/view/View.html#findViewById(int ).
Misalnya, dalam suatu kegiatan / tampilan:
atau jika Anda memiliki referensi ke tampilan:
sumber
Saya hanya akan memberikan jawaban ini sebagai alternatif algoritma rekursif @ IHeartAndroid untuk menemukan semua anak
View
dalam hierarki tampilan. Perhatikan bahwa pada saat penulisan ini, solusi rekursif cacat karena akan berisi duplikat dalam hasilnya.Bagi mereka yang memiliki kesulitan membungkus kepala mereka di sekitar rekursi, inilah alternatif non-rekursif. Anda mendapatkan poin bonus karena menyadari ini juga merupakan alternatif pencarian pertama untuk pendekatan mendalam-pertama dari solusi rekursif.
Beberapa tes cepat (tidak formal) menunjukkan alternatif ini juga lebih cepat, meskipun itu kemungkinan besar berkaitan dengan jumlah
ArrayList
contoh baru yang diciptakan oleh jawaban lain. Juga, hasil dapat bervariasi berdasarkan seberapa vertikal / horizontal hierarki tampilan.Diposting silang dari: Android | Dapatkan semua elemen anak-anak dari ViewGroup
sumber
Berikut ini adalah saran: Anda bisa mendapatkan
ID
(ditentukan misalnya olehandroid:id="@+id/..My Str..
) yang dihasilkanR
dengan menggunakan nama yang diberikan (misalnyaMy Str
). Potongan kode yang menggunakangetIdentifier()
metode akan menjadi:Dari dalam
Activity
, contoh penggunaan yang digabungkan denganfindViewById
adalah:sumber
Sebagai pembaruan bagi mereka yang menemukan pertanyaan ini setelah 2018, jika Anda menggunakan Kotlin, Anda cukup menggunakan properti ekstensi KTX Android ViewGroup.children untuk mendapatkan urutan anak-anak langsung View.
sumber
Untuk menyegarkan tata letak tabel (TableLayout) saya akhirnya harus menggunakan pendekatan rekursif yang disebutkan di atas untuk mendapatkan semua anak-anak anak-anak dan sebagainya.
Situasi saya agak disederhanakan karena saya hanya perlu bekerja dengan LinearLayout dan kelas-kelas itu diperluas seperti TableLayout. Dan saya hanya tertarik menemukan anak-anak TextView. Tapi saya pikir itu masih berlaku untuk pertanyaan ini.
Kelas terakhir berjalan sebagai utas terpisah, yang artinya dapat melakukan hal-hal lain di latar belakang sebelum mengurai untuk anak-anak. Kode ini kecil dan sederhana dan dapat ditemukan di github: https://github.com/jkincali/Android-LinearLayout-Parser
sumber
Metode ini mengambil semua tampilan di dalam tata letak, ini mirip dengan jawaban Alexander Kulyakhtin. Perbedaannya adalah, ia menerima semua jenis tata letak induk & mengembalikan Daftar tampilan Array.
sumber