14

Je ne comprends pas pourquoi findViewById renvoie l'élément mauvais, voici la classe:findViewById retourne un mauvais élément?

public class EventDetailsFragment extends FragmentActivity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState);   
     setContentView(R.layout.event_details); 
     Log.d("First", findViewById(R.id.tuxtView1).getClass().toString()); 
     Log.d("Second", findViewById(R.id.tuxtView2).getClass().toString()); 
     Log.d("Third", findViewById(R.id.imageView1).getClass().toString()); 
    } 
} 

Et voici le xml:

<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="@color/green" 
android:orientation="horizontal" 
android:paddingLeft="10dp" 
android:paddingRight="10dp" 
android:paddingTop="10dp"> 

    <RelativeLayout 
    android:id="@+id/relativeLayout1" 
    android:layout_width="0dp" 
    android:layout_height="175dp" 
    android:layout_gravity="center_horizontal" 
    android:layout_weight="1" 
    android:background="#fff" 
    android:gravity="right" > 

     <ImageView 
     android:id="@+id/imageView1" 
     android:layout_width="110dp" 
     android:layout_height="match_parent" 
     android:layout_weight="1" 
     android:src="@drawable/ic_event_image" /> 

     <TextView 
     android:id="@+id/tuxtView2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentTop="true" 
     android:layout_marginTop="10dp" />  
     <TextView 
     android:id="@+id/tuxtView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/tuxtView2" 
     android:layout_toRightOf="@+id/imageView1" 
     android:textColor="#555" 
     android:textSize="20dp" /> 

    </RelativeLayout> 

</LinearLayout> 

Le ouput logcat est:

12-26 23:43:20.249: D/First(6789): class android.widget.TextView 
12-26 23:43:20.249: D/Second(6789): class android.widget.ImageView 
12-26 23:43:20.249: D/Third(6789): class android.widget.TextView 

Donc le point est, pourquoi ai-je une imageview avec l'id R.id.tuxtView2 et un textview avec l'id R.id.imageView1. L'application se bloque si je veux attribuer une valeur de texte à R.id.tuxtView2, castée en tant que TextView.

+2

Essayez de recharger votre projet, peut-être un problème avec R.java, ou vérifiez que vous appelez le bon fichier avec setContentView. –

+0

Question bien documentée. Désolé, aucune idée pourquoi cela arrive. –

+0

@JeremyD, wow, j'essayais tout, pendant quelques heures, sauf redémarrer eclipse. J'ai redémarré Eclipse et cela a soudainement fonctionné à nouveau. Je pensais que je faisais quelque chose de mal dans mon code. Postez cela comme une réponse et je vous voterai + le marquer comme résolu. Merci! – jonepatr

Répondre

21

Essayez de recharger votre projet, peut-être quelque chose de mal avec R.java ou vérifiez que vous appelez le bon fichier avec setContentView. En rafraîchissant/nettoyant votre projet, le fichier R.java sera rechargé et retrouvera les widgets nommés.

+2

Je vais juste greffer sur cette réponse puisque vous avez raison, mais je vais ajouter que Pour moi, la suppression du contenu de mon dossier/gen était le seul moyen de résoudre un problème très similaire. – jiggy

+2

Merci! C'est très effrayant quand le code de Google prétend que "1 == 2";) – Adam

+1

NB: ne faites pas ce que j'ai fait et supprimez votre dossier/gen - faites attention à ne supprimer que le CONTENU de celui-ci. Si vous supprimez le tout, il interrompt temporairement ADT (mais vous obtenez une erreur vous indiquant comment le réparer, ce qui est bien), mais rompt définitivement SVN (si vous utilisez SVN). Pouah. La seule solution est de "rétablir" le dossier dans SVN. – Adam

2

J'ai copié votre code et créé une application fictive. Je suis arrivé à ces résultats:

12-27 00:03:48.332: D/First(9165): class android.widget.TextView 
12-27 00:03:48.332: D/Second(9165): class android.widget.TextView 
12-27 00:03:48.332: D/Third(9165): class android.widget.ImageView 

Apparemment, il n'y a rien de mal avec le code

+0

Merci, j'ai tout essayé sauf redémarrer eclipse, qui s'est avéré être la source du problème. Merci de prendre votre temps:) – jonepatr

+0

Pas de problème. La prochaine fois que vous pourriez essayer de cliquer droit sur votre projet et en sélectionnant Android Tools-> Fixer les propriétés du projet OU aller sous Projet Eclipse bar-> Clean Project – RonzyFonzy

0

J'ai essayé presque tout ici, mais rien n'a fonctionné jusqu'à ce que j'ajoute un nouveau composant à l'activité et, après exécution, notant que le nouveau composant n'a pas montré. Il a suggéré que mon application ne se mettait pas à jour avec les courses. Cela a fonctionné en désinstallant manuellement l'ancienne version de l'application puis en la redémarrant.

Questions connexes