Okay, das nervt mich wirklich. Dieser Fehler tritt auf eine ganz besondere, nicht sehr logische Weise auf.
Lassen Sie mich zunächst sagen, dass ich mir bereits die anderen Fragen zu diesem Fehler angesehen habe, Google auch. Soweit ich das beurteilen kann, treten die meisten ähnlichen Probleme auf, weil Benutzer auf eine String
Ressource oder etwas anderes verweisen, das nicht in derselben Layoutdatei enthalten ist, und das '+' in '@ id +' oder ähnlichem falsch platzieren.
Das Problem, das ich habe, tritt in einer XML-Layoutdatei mit einem auf RelativeLayout
. Dies enthält a TableLayout
, zwei LinearLayout
s mit Text und schließlich a ProgressBar
. Was ich möchte, ist, dass der Fortschrittsbalken mit dem relativen Layout ausgerichtet wird, indem android:layout_alignParentBottom="true"
die beiden linearen Layouts über dem Fortschrittsbalken ausgerichtet werden (das untere lineare Layout wird über dem Fortschrittsbalken ausgerichtet, das andere über dem unteren linearen Layout).
Es sollte einfach genug sein und so aussehen, als ob es funktioniert, dh die grafische Ansicht zeigt das gewünschte Ergebnis. Und hier kommt das Problem : Eclipse gibt mir einen Fehler bei den beiden linearen Layouts.
"Fehler: Es wurde keine Ressource gefunden, die dem angegebenen Namen entspricht (bei 'layout_above' mit dem Wert '@ id / LinearLayout_acc')."
und der gleiche Fehler für das andere lineare Layout, der sich auf den Fortschrittsbalken bezieht. Ich habe mehr als dreimal überprüft, ob es keine Tippfehler gibt (die IDs sind auch in packagename.R.java vorhanden), und ich habe ein Dutzend Mal versucht, das Projekt zu bereinigen.
Ich erhalte den Fehler beim Speichern (und beim automatischen Erstellen) erst, wenn ich mich entscheide, das Projekt auszuführen. Eine andere seltsame Sache ist, dass ich keinen Fehler bekomme, wenn ich mich auf das untere lineare Layout in der Fortschrittsanzeige anstatt auf das obere lineare Layout beziehe!
Meine Layoutdatei:
<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>
Bitte helfen Sie, ich habe keine Ahnung, was diesen Fehler verursacht!
Mit Antworten bearbeiten
Shrikant hatte die Lösung, die Reihenfolge des Erscheinungsbilds in der Layoutdatei so zu ändern, dass Elemente nur auf andere Elemente verweisen, die bereits beim Lesen der Referenz definiert wurden.
Wie andere bereits gepostet haben, werden durch das Ändern @id/
in @+id/
, auch in einer Referenz, die Fehlermeldungen entfernt. Wie Marco W. in diesem Thread schrieb , müssen Sie @+id/
das erste Mal verwenden @id/
, wenn jede ID erwähnt wird, und anschließend verwenden , auch wenn das erste Mal möglicherweise keine Definition ist.
Ich habe den größten Teil des Designs erstellt und die angegebenen IDs im grafischen Editor von Eclipse festgelegt, sodass automatisch Code eingefügt wurde, der zu einer Fehlermeldung führte. Vielleicht ist dies ein Fehler in Eclipse.
Veränderung
zu
quelle
@id/
auf vorhandene IDs verweisen@+id/
, neue IDs erstellen und diese könnten nicht ausgetauscht werden. Wie kommt es, dass dieser Ansatz legal ist? Ich definiere die ID dann zweimal?Ändern Sie jede ID
@id
in@+id
, unabhängig davon, wann eine ID definiert oder referenziert wird. Mit diesem werden Sie nicht bekommenquelle
quelle