Dalam file layout xml saya, saya telah menyertakan file layout xml lainnya (masing-masing dengan id android yang berbeda).
<include layout="@layout/view_contact_name" android:id="+id/test1"/>
<include layout="@layout/view_contact_name" android:id="+id/test2"/>
Tetapi ketika saya menjalankannya di emulator, dan memulai Hierarchy Viewer, setiap tata letak masih menampilkan 'NO_ID', dan dalam kode saya, saya memiliki
findViewById(R.id.test1)
dan findViewById(R.id.test2)
keduanya mengembalikan null.
Adakah yang bisa membantu saya dengan masalah saya?
android
android-layout
hap497
sumber
sumber
@
simbol.Jawaban:
Tentukan ID di
<include>
Kemudian gunakan dua
findViewById
untuk mengakses bidang di tata letakDengan menggunakan pendekatan itu, Anda dapat mengakses bidang apa pun di semua penyertaan yang Anda miliki.
sumber
merge
bahkan dalam teori, karena hasil dari menyertakanmerge
bukan tampilan tunggal, tetapi sekumpulan dari mereka. Jadi tidak apa-apa.Saya menemukan, bahwa jika Anda menggunakan
<merge>
tag dalam tata letak include Anda, maka ID dari include ditransfer ke tag gabungan yang bukan tampilan nyata.Jadi, hapus gabungan, atau ganti dengan beberapa tata letak.
Tor Norbye menulis :
sumber
Romain Guy menunjukkan bahwa Anda dapat mengganti ID dari tata letak yang disertakan dengan meletakkan
android:id
atribut di dalam<include>
tag.sumber
Menurut saya, jawaban teratas melewatkan poin terpenting dan mungkin menyesatkan orang agar mengira
<include/>
tag menciptakan Tampilan yang menyimpan konten penyertaan.Titik kunci adalah yang mencakup ini id yang dilewatkan ke akar pandangan termasuk tata letak file ini.
Artinya ini:
Menjadi ini:
sumber
yes adalah seperti ini, tetapi hati-hati ketika tata letak yang disisipkan dalam bidang include adalah tata letak khusus dan Anda ingin mengakses tata letak root tersebut. Layout itu dalam kasus ini @ layout / test test, sebenarnya dikembalikan di baris pertama.
sumber
sumber
Masalahnya adalah kami mencoba menggunakan id yang tidak dideklarasikan dalam file layout saat ini. Alih-alih mendeklarasikan lagi, id dapat dengan mudah dirujuk menggunakan
@+id/
. Jika Anda memfaktorkan ulang nama id asli melalui Android Studio, ia juga akan memfaktor ulang dalam tata letak yang disertakan.sumber
Dalam kasus menggunakan
<RecyclerView>
find id dari<include>
dengan menggunakan sebuah instance dari view yang digelembungkan atau akan mengembalikan null .sumber
Jika Anda telah menyetel id ke salah satu tag root dari tata letak yang disertakan, Anda dapat menggunakan id itu atau Anda dapat menyetel id ke tata letak yang disertakan.
Tapi Anda tidak bisa menyetel id ke keduanya, itu mungkin melempar pengecualian.
Atau
sumber
Saat berbicara tentang include, Anda memiliki id pada tampilan root di dalam file layout yang disertakan atau pada baris include itu sendiri dan bukan pada keduanya. Sebagai contoh:
Tata letak 1 file
Contoh di atas salah karena secara teknis Anda memiliki dua id yang dideklarasikan untuk layout yang sama. Jadi yang harus Anda lakukan adalah memilih elemen mana yang akan memiliki id.
sumber
Wow, saya tidak percaya pertanyaan ini belum memiliki jawaban yang benar. Tag sederhana itu payah. Anda hanya dapat mengubah hal-hal yang dimulai dengan
android:layout_
yangandroid:id
tidak cocok. Jadi jawabannya tidak bisa. Maaf. Yang dapat Anda lakukan adalah membuat kelas yang akan menjadi ViewGroup yang akan memekarkan tampilan yang disertakan di dalamnya, lalu menambahkannya sebagai tag dalam tata letak Anda, tapi itu saja.sumber