web-dev-qa-db-fra.com

erreur "id ne peut pas être résolu ou n'est pas un champ"?

Je continue à avoir cette erreur. Devrais-je simplement faire id un champ?

Mon code est:

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();
}

Comment corrigez-vous cela exactement?

26
Mia

Ne modifiez pas la classe R. L'erreur signifie qu'il y a quelque chose de mal syntaxiquement dans vos présentations XML et que R ne peut pas être généré automatiquement. Essayez de regarder là-bas et publiez le code xml dont vous n'êtes pas sûr, le cas échéant.

Modifier: également: supprimer "importer Android.R" des importations en haut du fichier (le cas échéant). 

44
Andy Zhang

Regardez vos déclarations import en haut. Si vous dites import Android.R, alors il y a un problème. Ce n'est peut-être pas le seul, car ces erreurs «R» peuvent être délicates, mais ce serait certainement au moins une partie du problème. 

Si le problème persiste, assurez-vous que votre plug-in Eclipse (ADT) et votre SDK Android sont complètement à jour, supprimez le projet de l'émulateur/du téléphone en le supprimant manuellement du système d'exploitation, puis nettoyez le projet (Lancer Eclipse). > Projet-> Nettoyer ...). Cela semble idiot de s’assurer que vos données sont entièrement à jour, mais les versions antérieures d’ADT et de SDK contiennent de nombreux bogues gênants liés aux fichiers R qui ont été corrigés depuis. 

Juste pour votre information, le contenu de la classe R est généré à partir du contenu du dossier res (ou ressources) de votre projet. La classe R vous permet de référencer une ressource (telle qu'une image ou une chaîne) sans avoir à effectuer d'opérations sur les fichiers partout. Cela fait aussi d'autres choses, mais c'est pour une autre réponse. Le système d'exploitation Android utilise un schéma similaire: il possède un dossier de ressources et la classe Android.R est le moyen d'accéder aux éléments du dossier de ressources Android. Le problème se pose lorsque, dans une même classe, vous utilisez à la fois vos propres ressources et les ressources Android standard. Normalement, vous pouvez dire import en haut, puis référencer une classe en utilisant simplement le dernier bit du nom (par exemple, import Java.util.List vous permet d'écrire simplement List dans votre classe et le compilateur sait que vous voulez dire Java.util.List). Lorsque vous devez utiliser deux classes portant le même nom, comme dans le cas de la classe R générée automatiquement, vous pouvez en importer une et vous devez qualifier complètement l’autre chaque fois que vous voulez en faire l’objet. En règle générale, j'importe le fichier R de mon projet, puis je dis simplement Android.R. que ce soit lorsque je souhaite utiliser une ressource Android. 

En outre, pour réitérer Andy, ne modifiez pas le fichier R automatiquement. Ce n'est pas comme ça que ça doit être utilisé. 

50
Hamy

Une solution possible: -

Résumé: assurez-vous que vous utilisez import com.yourpkgdomainname.yourpkgappname.R au lieu de import Android.R

Détails: Le problème est survenu lorsque j'ai modifié l'identifiant d'une étiquette qui était référencée ailleurs dans le fichier XML de présentation. En raison de cette erreur, le fichier R a cessé de générer au début. Eclipse gère mal les erreurs avec les fichiers de présentation.

Lorsque j'ai corrigé la référence d'ID (avec le projet propre plusieurs fois et le redémarrage d'Eclipse, j'ai remarqué que mes packages d'importation présentaient désormais:
import Android.R

Le changer pour suivre a corrigé l'erreur:
import com.example.app.R

29
Doc

Je viens de résoudre mon problème en cliquant avec le bouton droit de la souris dans le dossier de mise en page et en cliquant sur l'option Valider. Certaines fenêtres apparaîtront, il vous suffit de cliquer OK et c'est bien.

6
Saraceni

Peut-être avez-vous créé un nouveau fichier xml dans Répertoire de disposition dont le nom de fichier contient une lettre majuscule, ce qui n'est pas autorisé dans le fichier xml sous Répertoire de présentation.

J'espère que cette aide.

5
arun

Comme Jake l’a mentionné, le problème pourrait provenir du code copier/coller . Vérifiez le fichier main.xml sous res/layout. S'il n'y a pas de champ id dans celui-ci, alors vous avez un problème ... Un exemple typique serait comme ci-dessous

<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

Il suffit de lancer ceci, mais essayez de retaper les choses manuellement. Il est possible que vos guillemets soient "incorrects", car il existe un caractère Unicode similaire qui ressemble mais ne constitue PAS un guillemet.

Si vous copiez/collez les extraits de code d'un site Web, c'est peut-être votre problème.

3
Jake

Eclipse peut parfois confondre avec d’autres projets du même répertoire. 

Modifiez simplement le nom du package (n'oubliez pas de modifier également le fichier manifeste Android), assurez-vous que le nom du package n'est pas déjà utilisé dans le répertoire. Cela peut marcher.

3
Senthil

Je viens de découvrir cela moi-même.

Enfin, mon problème était lié à un fichier .png contenant une lettre majuscule, le même problème. Eclipse n'a jamais signalé le fichier tant que je ne l'ai pas fermé et ouvert Eclipse back up.

2
Don

Il suffit de nettoyer votre projet pour que R soit généré automatiquement. Cela a fonctionné pour moi.

2
kiran boghra

Ce qui semble être le problème, je viens de réparer le mien au cas où quelqu'un se le demanderait - En raison d’autres erreurs, j’ai automatiquement désactivé la construction, quand j’ai créé un nouveau projet, il est dit que R.layout.main avait un problème et devait importer R; Donc, naturellement en tant que novice, je l'ai fait. Ensuite, j'ai construit manuellement et il y avait un problème avec principal. Essayez de construire votre programme tel quel, supprimez import R et tout ira bien.

2
skiracr39

J'ai aussi eu cette erreur quand je travaillais une fois dans une classe Java. Mon problème était simplement que mon fichier xml, avec les références qu'il contenait, n'était pas enregistré. Si vous avez le fichier XML et la classe Java ouverts dans des onglets, vérifiez que le nom du fichier XML dans l'onglet ne comporte pas de *.

J'espère que cela t'aides.

2
Landan Peters

Dans main.xml (ou à l'endroit où votre élément est défini), assurez-vous que l'ID de l'élément R est défini avec @+id/... Voici un exemple avec un bouton:

<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" />

Chacun de ceux-ci est important pour les raisons suivantes:

  • @ doit précéder la chaîne
  • + indique qu'il créera s'il n'est pas existant (quel que soit votre élément)
2
Heidi H.

Cela m'a fait assez mal mais j'ai trouvé la solution:

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

J'ai eu ce problème mais dans mon cas, il a été résolu en redémarrant Eclipse.

1

sélectionnez l'onglet Projet et cliquez sur Construire automatiquement pour que l'option Tout construire soit activée, puis cliquez sur Construire tout.et commencez toujours le nom du fichier XML par des minuscules.

0
raman rayat

Pour moi la cause du problème était que j'avais 2 images du même nom dans mon dossier drawable-hdpi. Une fois que j'ai résolu ce problème, le R.Java s'est reconstruit et le problème a été automatiquement résolu.

0
user2533630