Okej, więc zaczyna mnie to naprawdę denerwować. Ten błąd pojawia się w bardzo specjalny, niezbyt logiczny sposób.
Zacznę od stwierdzenia, że spojrzałem już na inne pytania dotyczące tego błędu, wygooglowałem też. O ile wiem, większość podobnych problemów występuje, ponieważ ludzie odwołują się do String
zasobu lub czegoś innego, co nie znajduje się w tym samym pliku układu, zgubili znak „+” w „@ id +” lub coś podobnego.
Problem, który mam, występuje w pliku układu .xml z rozszerzeniem RelativeLayout
. Zawiera a TableLayout
, dwa LinearLayout
s zawierające jakiś tekst i na koniec a ProgressBar
. Chcę, aby pasek postępu był wyrównany z układem względnym za pomocą, android:layout_alignParentBottom="true"
a następnie wyrównaj dwa układy liniowe nad paskiem postępu (dolny układ liniowy wyrównany nad paskiem postępu, drugi wyrównany nad dolnym układem liniowym).
Powinien być dość prosty i wyglądać, jakby działał, tj. Widok graficzny pokazuje pożądany efekt. Jednak i tu pojawia się problem , Eclipse daje mi błąd w dwóch układach liniowych,
„Błąd: nie znaleziono zasobu pasującego do podanej nazwy (w„ layout_above ”o wartości„ @ id / LinearLayout_acc ”).”
i ten sam błąd dla innego układu liniowego odnoszącego się do paska postępu. Ponad trzykrotnie sprawdziłem, czy nie ma literówek (identyfikatory istnieją również w nazwa_pakietu.R.java) i kilkanaście razy próbowałem wyczyścić projekt.
Nie pojawia się błąd podczas zapisywania (i automatycznego budowania), dopóki nie zdecyduję się uruchomić projektu. Inną dziwną rzeczą jest to, że kiedy odnoszę się do dolnego układu liniowego z paska postępu zamiast górnego układu liniowego, nie widzę błędu!
Mój plik układu:
<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>
Proszę o pomoc, nie mam pojęcia, co powoduje ten błąd!
Edytuj z odpowiedziami
Shrikant przyszedł z rozwiązaniem polegającym na zmianie kolejności pojawiania się w pliku układu, tak aby elementy odwoływały się tylko do innych elementów już zdefiniowanych podczas odczytywania odniesienia.
Ponadto, jak napisali inni, zmiana @id/
na @+id/
, nawet w pliku referencyjnym, usuwa komunikaty o błędach. Jak napisał Marco W. w tym wątku, chodzi o to, że musisz użyć @+id/
pierwszego identyfikatora, gdy jest wymieniany, a następnie użyć go @id/
później, nawet jeśli pierwszy raz może nie być definicją.
Wykonałem większość projektu i ustawiłem wskazane identyfikatory w edytorze graficznym Eclipse, więc kod, który spowodował wyświetlenie komunikatu o błędzie, został automatycznie wstawiony. Może to błąd w Eclipse.
zmiana
do
źródło
@id/
o odwoływanie się do istniejących identyfikatorów,@+id/
tworzenie nowych identyfikatorów i że nie można ich zamieniać. Dlaczego to podejście jest legalne? W takim razie dwukrotnie definiuję identyfikator?Zmień każdy identyfikator
@id
na@+id
, bez względu na to, kiedy definiuje lub odwołuje się do identyfikatora. Dzięki temu nie dostanieszźródło
<LinearLayout android:id="@+id/LinearLayout_dist" android:layout_above="@+id/LinearLayout_acc" <--- here might be a problem you forgot + sign android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_marginBottom="10dp" >
źródło