Android – Ressource attendue de type ID

J’ai ce code

final static int TITLE_ID = 1; final static int REVIEW_ID = 2; 

Maintenant, je veux créer une nouvelle mise en page dans ma classe principale

 public View createContent() { // create linear layout for the entire view LinearLayout layout = new LinearLayout(this); layout.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); layout.setOrientation(LinearLayout.VERTICAL); // create TextView for the title TextView titleView = new TextView(this); titleView.setId(TITLE_ID); titleView.setTextColor(Color.GRAY); layout.addView(titleView); StarView sv = new StarView(this); sv.setId(REVIEW_ID); layout.addView(sv); return layout; } 

Mais quand j’appelle TITLE_ID et REVIEW_ID, cela me donne une erreur

Fournir le mauvais type d’identifiant de ressource.
Par exemple, lorsque vous appelez Resources.getSsortingng (int id), vous devriez être en train de transmettre quelque chose à R.ssortingng, pas à R. Maintenant.
Passer la mauvaise constante à une méthode qui attend l’un des ensembles de constantes spécifiques. Par exemple, lorsque vous appelez View # setLayoutDirection, le paramètre doit être android.view.View.LAYOUT_DIRECTION_LTR ou android.view.View.LAYOUT_DIRECTION_RTL.

Je n’ai aucun problème à exécuter ce code. Je me demande juste pourquoi cela me donne une erreur. Une idée?

Ce n’est pas une erreur de compilation. C’est juste une erreur de validation de l’éditeur (avertissement de peluches) car ce n’est pas un moyen courant de traiter les identifiants.

Donc, si votre application prenant en charge l’API 17 et les versions ultérieures,

vous pouvez appeler View.generateViewId comme

  titleView.setId(View.generateViewId()); 

et

  sv.setId(View.generateViewId()); 

et pour API <17

  1. ouvrir le dossier res/values/ folder de votre projet
  2. créer un fichier xml appelé ids.xml

avec le contenu suivant:

      

alors dans votre code,

  titleView.setId(R.id.titleId); 

et

  sv.setId(R.id.svId); 

Et pour désactiver cet avertissement (si vous voulez)

Dans Android Studio, cliquez sur l’ampoule en ligne avec cette “erreur”. Et sélectionnez Désactiver l’inspection dans le premier sous-menu.

Vous pouvez également désactiver lint au fichier build.gradle. Ajoutez ces lignes dans votre fichier build.gradle.

 android { lintOptions{ disable "ResourceType" } } 

Je l’inclus comme une alternative à “réparer” le problème pour ceux qui ne peuvent pas générer un ID de vue (c.-à-d. Définir l’ID avant que la vue est réellement présente) et savoir ce qu’ils font.

Directement au-dessus d’une déclaration de variable ou d’une méthode contenant le problème, il suffit d’inclure @SuppressWarnings("ISSUE_IDENTIFIER") pour désactiver l’avertissement de filtre pour cette instance.

Dans ce cas, ce serait @SuppressWarnings("ResourceType")

L’utilisation de méthodes générales pour désactiver le type d’avertissement est une mauvaise pratique et peut entraîner des problèmes imprévus, tels que des memory leaks et un code instable. Ne publiez pas de déchets.

Veillez à annuler l’option Disable inspection et à supprimer ces lignes du fichier build.gradle:

 android { lintOptions{ disable "ResourceType" } }