Apa perbedaan antara
@id/
dan@+id/
?
Dalam @+id/
simbol plus +
menginstruksikan untuk membuat nama sumber daya baru dan menambahkan R.java
file tetapi bagaimana @id/
? Dari dokumentasi ID
: ketika mereferensikan sumber daya Android ID
, Anda tidak perlu simbol plus, tetapi harus menambahkan namespace paket android, seperti:
android:id="@android:id/list"
Namun pada gambar di bawah ini Eclipse tidak menyarankan apa pun @android:id/
.
Apakah
@id/
dan@android:id/
sama?
android
android-xml
Vikas Patidar
sumber
sumber
Jawaban:
Anda merujuk
Android resources
, yang sudah didefinisikan dalam sistem Android, dengan@android:id/..
sementara untuk mengakses sumber daya yang telah Anda tetapkan / buat dalam proyek Anda, Anda menggunakan@id/..
Info lebih lanjut
Sesuai klarifikasi Anda dalam obrolan, Anda mengatakan Anda memiliki masalah seperti ini:
Yah, itu tergantung pada konteksnya, ketika Anda menggunakan atribut XML
android:id
, maka Anda menentukan id baru, dan menginstruksikan pengurai (atau menyebutnya pembangun) untuk membuat entri baruR.java
, sehingga Anda harus termasuk sebuah+
tanda.Sementara dalam kasus lain, seperti
android:layout_below="@id/myTextView"
, Anda merujuk ke id yang telah dibuat, jadi parser menautkan ini ke id yang sudah dibuat diR.java
.Info Lebih Lanjut Lagi
Seperti yang Anda katakan dalam obrolan Anda, perhatikan bahwa
android:layout_below="@id/myTextView"
tidak akan mengenali elemen dengan idmyTextView
jika itu ditulis setelah elemen tempat Anda menggunakannya.sumber
android:layout_below="@+id/myTextView"
dan MAKA menentukan elemen itu sendiri denganandroid:id="@id/myTextView"
.+
dalamlayout_below
danandroid:id
benar-benar baik-baik saja, karenaThe '+' means to create the symbol if it doesn't already exist
seperti yang disebutkan Tanmay Mandal dalam jawabannya yang bagus (belum diremehkan). Karena itu, tidak ada efek runtime negatif (mungkin peningkatan waktu kompilasi yang tidak terukur ^^).tanda + adalah jalan pintas untuk menambahkan id ke daftar id sumber daya Anda. Kalau tidak, Anda perlu memilikinya dalam file xml seperti ini
sumber
<View android:id="@id/my_logo"/>
Jika Anda tidak memiliki file sumber daya yang saya tetapkan di atas maka Anda perlu melakukannya seperti<View android:id="@+id/my_logo"/>
catatan: Anda hanya perlu melakukan + id satu kali jadi jika dalam file tata letak lain yang Anda lakukan <View android: id = "+ id / my_logo" /> Anda tidak perlu memasukkan karakter '+' saat berikutnya Anda menggunakan id yang sama dalam tata letak.res/drawable/
ataures/layout/
ataures/values/
dan apa yang akan menjadi nama file itu? Jika Anda memiliki tautan yang bermanfaat mengenai hal ini maka silakan posting di sini.Terkadang Anda melihat referensi di file tata letak Anda seperti:
<listview id="@+id/android:list">
dan
<listview id="@android:id/list">
Apa bedanya?
.. Saya senang Anda bertanya ☺
@+id/foo
berarti Anda membuat id bernama foo di namespace aplikasi Anda. Anda dapat merujuknya menggunakan@id/foo
.@android:id/foo
berarti Anda merujuk ke id yang ditentukan di namespace android.'+' Berarti membuat simbol jika belum ada. Anda tidak memerlukannya (dan tidak boleh menggunakannya) ketika mereferensikan simbol android: karena sudah ditentukan untuk Anda oleh platform dan Anda tidak dapat membuatnya sendiri di namespace itu.
Namespace ini adalah namespace dari framework. misalnya, Anda perlu menggunakan
@android:id/list
karena ini id kerangka kerja yang diharapkan untuk menemukan .. (kerangka kerja hanya tahu tentang id di namespace android.)Disalin sepenuhnya dari sumber ini
sumber
Pendeknya
sementara
sumber
Dari: https://developer.android.com/training/basics/firstapp/building-ui.html
sumber
Sangat sederhana:
"@ + ..." - buat yang baru
"@ ..." - tautan yang ada
Sumber: https://developer.android.com/guide/topics/resources/layout-resource.html#idvalue
sumber
Dari Panduan Pengembang :
Simbol-at (
@
) di awal string menunjukkan bahwa parser XML harus mem-parsing dan memperluas sisa string ID dan mengidentifikasinya sebagai sumber daya ID. Simbol plus (+
) berarti bahwa ini adalah nama sumber daya baru yang harus dibuat dan ditambahkan ke sumber daya kami (dalamR.java
file). Ada sejumlah sumber daya ID lainnya yang ditawarkan oleh kerangka kerja Android. Saat mereferensikan ID sumber daya Android, Anda tidak perlu simbol plus, tetapi harus menambahkanandroid
namespace paket, seperti:android:id="@android:id/empty"
sumber
Ada bug dengan Eclipse di mana kadang-kadang jika Anda baru saja membuat yang baru
@+id/..
, itu tidak akan segera ditambahkan ke file R.java, bahkan setelah membersihkan proyek. Solusinya adalah me-restart Eclipse.Ini saya pikir harus diselesaikan sesegera mungkin, karena mungkin (dan dari pengalaman, akan) membingungkan beberapa pengembang untuk berpikir bahwa ada sesuatu yang salah dengan sintaks mereka, dan mencoba untuk men-debug itu bahkan jika benar-benar tidak ada yang debug.
sumber
Android menggunakan beberapa file yang disebut sumber daya tempat nilai disimpan untuk file XML.
Sekarang ketika Anda menggunakan @ id / untuk objek XML, ia mencoba merujuk ke id yang sudah terdaftar di file nilai. Di sisi lain, ketika Anda menggunakan @ + id / ia mendaftarkan id baru di file nilai sebagaimana tersirat oleh simbol '+'.
Semoga ini membantu :).
sumber
@id/
dan@android:id/
tidak sama.@id/
referensi ID di aplikasi Anda,@android:id/
referensi item di platform Android.Gerhana salah.
sumber
@id/ referencing ID in your application
Tapi eclise memberiError: No resource found that matches the given name (at 'id' with value '@id/my_resource_id')
ketika kita menggunakannya untuk merujuk sumber daya aplikasi. Jadi apa perbedaan antara@id/
dan@+id/
? Bagaimana Anda bisa mengatakan gerhana itu salah?@id/
hanya dalam kasusRelativeLayout
Perbedaan antara
@+id
dan@id
adalah:@+id
digunakan untuk membuat id untuk tampilan dalamR.java
file.@id
digunakan untuk merujuk id yang dibuat untuk tampilan dalam file R.java.Kami menggunakan
@+id
denganandroid:id=""
, tetapi bagaimana jika id tidak dibuat dan kami merujuk sebelum dibuat (Forward Referencing).Dalam hal ini, kita harus menggunakan
@+id
untuk membuat id dan sementara mendefinisikan pandangan kita harus merujuknya.Silakan merujuk kode di bawah ini:
Pada kode di atas, id untuk Spinner
@+id/spinner
dibuat di tampilan lain dan saat mendefinisikan spinner, kami merujuk id yang dibuat di atas.Jadi, kita harus membuat id jika kita menggunakan view sebelum view telah dibuat.
sumber
Perbedaan antara
“@+id/”
dan“@id/”
di AndroidYang pertama digunakan untuk membuat
ID
komponen ui tertentu dan yang lain digunakan untuk merujuk komponen tertentusumber
Jika pandangan item yang melakukan operasi yang sama, Anda dapat menggunakan
@+id
untuk setiap entri dalam tata letak apapun karena selama kompilasi beberapa@+id/foo
yangR.java
berkas hanya menciptakan satu pencacahan. Jadi misalnya, jika saya memiliki tombol simpan di setiap halaman yang melakukan operasi yang sama, saya gunakanandroid:id="@+id/button_save"
di setiap tata letak. File R.java hanya memiliki satu entri untuk button_save.sumber