Oke, jadi ini mulai sangat mengganggu saya. Kesalahan ini muncul dengan cara yang sangat khusus, tidak terlalu logis.
Izinkan saya memulai dengan mengatakan bahwa saya telah melihat pertanyaan lain tentang kesalahan ini, juga di Google. Sejauh yang saya tahu, sebagian besar masalah serupa terjadi karena orang merujuk ke String
sumber daya atau sesuatu yang lain yang tidak berada dalam file tata letak yang sama, mereka salah menempatkan '+' di '@ id +' atau yang serupa.
Masalah yang saya alami terjadi pada file .xml layout dengan RelativeLayout
. Ini berisi a TableLayout
, dua LinearLayout
s berisi beberapa teks dan akhirnya a ProgressBar
. Yang saya inginkan adalah bilah kemajuan disejajarkan dengan tata letak relatif menggunakan android:layout_alignParentBottom="true"
dan kemudian sejajarkan dua tata letak linier di atas bilah kemajuan (tata letak linier bawah sejajar di atas bilah kemajuan, perataan lainnya di atas tata letak linier bawah).
Ini harus cukup sederhana dan terlihat seperti berfungsi, yaitu tampilan grafik menunjukkan hasil yang diinginkan. Namun, dan inilah masalahnya , Eclipse memberi saya kesalahan pada dua tata letak linier,
"Kesalahan: Tidak ditemukan sumber daya yang cocok dengan nama yang diberikan (di 'layout_above' dengan nilai '@ id / LinearLayout_acc')."
dan kesalahan yang sama untuk tata letak linier lainnya yang mengacu pada bilah kemajuan. Saya telah memeriksa lebih dari tiga kali bahwa tidak ada kesalahan ketik (id juga ada di nama paket.R.java), dan saya telah mencoba membersihkan proyek belasan kali.
Saya tidak mendapatkan kesalahan saat menyimpan (dan membangun otomatis), tidak sampai saya memutuskan untuk menjalankan proyek. Hal aneh lainnya adalah ketika saya merujuk ke tata letak linier bawah dari bilah kemajuan alih-alih tata letak linier atas, saya tidak mendapatkan kesalahan!
File tata letak saya:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/background_activity" >
<TableLayout
... />
<LinearLayout
android:id="@+id/LinearLayout_dist"
android:layout_above="@id/LinearLayout_acc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginBottom="10dp" >
<TextView
... />
<TextView
... />
</LinearLayout>
<LinearLayout
android:id="@+id/LinearLayout_acc"
android:layout_above="@id/ProgressBar_statusScreen"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true" >
<TextView
... />
<TextView
... />
</LinearLayout>
<ProgressBar
android:id="@+id/ProgressBar_statusScreen"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_margin="16dp" />
</RelativeLayout>
Tolong bantu, saya tidak tahu apa yang menyebabkan kesalahan ini!
Edit dengan jawaban
Shrikant hadir dengan solusi untuk mengubah urutan tampilan di file tata letak sehingga elemen hanya mereferensikan elemen lain yang sudah ditentukan saat referensi dibaca.
Selain itu, seperti yang telah diposting orang lain, mengubah @id/
ke @+id/
, bahkan dalam sebuah referensi, memang menghapus pesan kesalahan. Seperti yang ditulis Marco W. di thread ini , masalahnya adalah Anda harus menggunakan @+id/
pertama kali setiap id disebutkan dan kemudian digunakan @id/
setelahnya, meskipun yang pertama mungkin bukan definisi.
Saya membuat sebagian besar desain dan mengatur id yang dirujuk di editor grafis Eclipse, sehingga kode yang menghasilkan pesan kesalahan secara otomatis dimasukkan. Mungkin ini bug di Eclipse.
perubahan
untuk
sumber
@id/
itu untuk mereferensikan id yang ada,@+id/
untuk membuat id baru dan ini tidak dapat dipertukarkan. Kenapa pendekatan ini legal? Saya mendefinisikan id dua kali?Ubah setiap id
@id
menjadi@+id
, tidak peduli kapan itu mendefinisikan atau mereferensikan sebuah id. Dengan ini, Anda tidak akan mendapatkannyasumber
sumber