webentwicklung-frage-antwort-db.com.de

"ID kann nicht aufgelöst werden oder ist kein Feld" Fehler?

Ich bekomme diesen Fehler immer wieder. Soll ich einfach id ein Feld machen?

Mein Code lautet:

public void onCreate(Bundle icicle) 
{
    super.onCreate(icicle);
    setContentView(R.layout.main);
    ImageView mainimage = (ImageView) findViewById(R.id.mainanim);
    mainimage.setBackgroundResource(R.anim.mainanim);
    mainanimation = (AnimationDrawable) mainimage.getBackground();
}

Wie genau regeln Sie das?

26
Mia

Ändern Sie nicht die R-Klasse. Der Fehler bedeutet, dass in Ihren XML-Layouts etwas syntaktisch falsch ist und R nicht automatisch generiert werden kann. Suchen Sie dort nach und posten Sie den XML-Code, über den Sie sich nicht sicher sind, falls vorhanden.

Edit: auch: "import Android.R" von Importen am Anfang der Datei entfernen (falls vorhanden) 

44
Andy Zhang

Sehen Sie sich oben Ihre import-Anweisungen an. Wenn Sie import Android.R sagen, dann ist das ein Problem. Es ist vielleicht nicht der einzige, da diese 'R'-Fehler knifflig sein können, aber es wäre definitiv ein Teil des Problems. 

Wenn dies nicht behoben ist, stellen Sie sicher, dass Ihr Eclipse-Plugin (ADT) und Ihr Android-SDK auf dem neuesten Stand sind. Entfernen Sie das Projekt aus dem Emulator/Telefon, indem Sie es manuell aus dem Betriebssystem löschen, und reinigen Sie das Projekt (Starten Sie Eclipse- > Projekt-> Reinigen ...). Klingt dumm, um sicherzustellen, dass Ihre Sachen auf dem neuesten Stand sind, aber in den früheren Versionen von ADT und SDK gibt es viele lästige Fehler in Bezug auf die R-Dateien, die inzwischen gelöscht wurden. 

Nur zu Ihrer Information, das Zeug, das in der R-Klasse angezeigt wird, wird aus dem Zeug in Ihrem Projektordner res (aka resources) generiert. Mit der R-Klasse können Sie auf eine Ressource (z. B. ein Image oder eine Zeichenfolge) verweisen, ohne dass Sie Dateioperationen überall durchführen müssen. Es macht auch andere Sachen, aber das ist eine andere Antwort. Android OS verwendet ein ähnliches Schema - es hat einen Ressourcenordner und die Klasse Android.R ist der Weg, auf Dinge im Android-Ressourcenordner zuzugreifen. Das Problem tritt auf, wenn Sie in einer einzelnen Klasse sowohl Ihre eigenen Ressourcen als auch Android-Standardressourcen verwenden. Normalerweise können Sie import oben sagen und dann eine Klasse referenzieren, indem Sie nur das letzte Bit des Namens verwenden (zum Beispiel können Sie mit import Java.util.List einfach List in Ihre Klasse schreiben und der Compiler weiß, dass Sie Java.util.List meinen.). Wenn Sie zwei Klassen mit demselben Namen verwenden müssen, wie dies bei der automatisch generierten R-Klasse der Fall ist, können Sie eine dieser Klassen importieren und müssen die andere vollständig qualifizieren, wenn Sie es meinen wollen. Normalerweise importiere ich die R-Datei für mein Projekt und sage dann einfach Android.R. Was auch immer, wenn ich eine Android-Ressource möchte. 

Um Andy zu wiederholen, ändern Sie die R-Datei nicht automatisch. So soll es nicht verwendet werden. 

50
Hamy

Eine mögliche Lösung: -

Zusammenfassung: Stellen Sie sicher, dass Sie import com.yourpkgdomainname.yourpkgappname.R anstelle von import Android.R verwenden.

Details: Das Problem trat auf, als ich die ID eines Labels geändert habe, das an anderen Stellen in der XML-Layoutdatei angegeben wurde. Aufgrund dieses Fehlers wurde die Erzeugung der R-Datei zunächst gestoppt. Eclipse verarbeitet Fehler in den Layoutdateien.

Als ich die ID-Referenz korrigiert habe (mit einigen Projektbereinigungen und Neustarten von Eclipse, habe ich festgestellt, dass meine Importpakete jetzt Folgendes aufweisen:
import Android.R

Wenn Sie Folgendes ändern, wurde der Fehler behoben:
import com.example.app.R

29
Doc

Ich habe mein Problem behoben, indem Sie mit der rechten Maustaste in den Layoutordner geklickt und auf die Option Validate geklickt haben. Einige Fenster werden angezeigt, Sie klicken einfach auf OK und es ist in Ordnung.

6
Saraceni

Möglicherweise haben Sie im Layoutverzeichnis eine neue XML-Datei erstellt, deren Dateiname einen Großbuchstaben enthält, der in der XML-Datei unter Layoutverzeichnis nicht zulässig ist.

Ich hoffe das hilft.

5
arun

Wie Jake bereits erwähnt hat, liegt das Problem möglicherweise am Copy/Paste-Code. Überprüfen Sie die Datei main.xml unter res/layout. Wenn sich in diesem Feld kein ID-Feld befindet, haben Sie ein Problem ..__ Ein typisches Beispiel wäre wie folgt

<com.androidplot.xy.XYPlot
Android:id="@+id/mySimpleXYPlot"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:layout_marginTop="10px"
Android:layout_marginLeft="20px"
Android:layout_marginRight="20px"
title="A Simple Example"
/>

3
Ashwin

Wirf einfach das hier raus, aber versuche Dinge manuell neu einzugeben. Es besteht die Möglichkeit, dass Ihre Anführungszeichen "falsch" sind, da es ein ähnliches Unicode-Zeichen gibt, das ähnlich aussieht, aber KEIN Anführungszeichen ist.

Wenn Sie die Code-Schnipsel von einer Website kopieren/einfügen, kann dies Ihr Problem sein.

3
Jake

In einigen Fällen kann Eclipse mit anderen Projekten im selben Verzeichnis verwechseln. 

Ändern Sie einfach den Paketnamen (vergessen Sie nicht, auch die Android-Manifestdatei zu ändern), und stellen Sie sicher, dass der Paketname nicht bereits im Verzeichnis verwendet wird. Es kann funktionieren.

3
Senthil

Ich bin gerade auf mich selbst gestoßen.

Schließlich fand ich heraus, dass mein Problem mit einer .png-Datei war, die ich hinzugefügt hatte und die einen Großbuchstaben enthielt und genau das gleiche Problem verursachte. Eclipse hat die Datei nie markiert, bis ich sie geschlossen habe und Eclipse wieder geöffnet habe.

2
Don

Reinigen Sie einfach Ihr Projekt, damit R automatisch generiert wird. Das hat bei mir funktioniert.

2
kiran boghra

Was scheint das Problem zu sein, ich habe nur eines behoben, falls sich jemand wunderte. Aufgrund anderer Fehler habe ich build automatisch deaktiviert. Als ich ein neues Projekt erstellte, sagte es, dass R.layout.main ein Problem hatte und R importieren musste. Als Anfänger natürlich, ich habe es getan. Dann baute ich manuell und hatte ein Problem mit main. Versuchen Sie, Ihr Programm so zu erstellen, wie es ist, entfernen Sie Import R und es sollte in Ordnung sein.

2
skiracr39

Ich hatte auch diesen Fehler, als ich einmal in einer Java-Klasse arbeitete. Mein Problem war einfach, dass meine XML-Datei mit den Referenzen darin nicht gespeichert wurde. Wenn Sie sowohl die XML-Datei als auch die Java-Klasse in Registerkarten geöffnet haben, stellen Sie sicher, dass der Name der XML-Datei auf der Registerkarte kein * enthält.

Hoffe das hilft.

2
Landan Peters

Stellen Sie in main.xml (oder wo auch immer Ihr Artikel definiert ist) sicher, dass die ID für den R-Artikel mit @+id/... definiert ist. Hier ist ein Beispiel mit einer Schaltfläche:

<Button Android:text="B1" Android:id="@+id/button_one"
        Android:layout_gravity="center_horizontal|center"
        Android:layout_height="fill_parent" Android:layout_width="wrap_content" />

Jedes davon ist wichtig, weil:

  • @ muss vor der Zeichenfolge stehen
  • + zeigt an, dass es erstellt wird, wenn es nicht vorhanden ist (was auch immer Ihr Artikel ist)
2
Heidi H.

Es tat mir genug weh, aber ich fand die Lösung:

PROJECT ---> Clean ----> (Sele)
2
Xaheen

Ich hatte dieses Problem, aber in meinem Fall wurde es durch einen Neustart der Eclipse behoben.

1

wählen Sie die Registerkarte "Projekt" und klicken Sie auf "Automatisch erstellen". Die Option "Alle erstellen" wird aktiviert. Klicken Sie dann auf "Alle erstellen". Starten Sie den XML-Dateinamen immer mit Kleinbuchstaben.

0
raman rayat

Für mich war die Ursache des Problems, dass ich 2 Bilder mit demselben Namen in meinem drawable-hdpi-Ordner hatte. Nachdem ich das gelöst habe, hat sich die R.Java neu aufgebaut und das Problem wurde automatisch gelöst.

0
user2533630