2009-08-26 8 views
1

J'ai un problème lors de l'utilisation de la classe "ViewHolder". J'utilise "ViewHolder" pour améliorer mon discours d'affichage de liste. Je pense que le code est correct, mais pourquoi il lance une exception quand "setText" avec des données de "Cursor". Mon code ici:Problème avec la classe "ViewHolder" dans android

if(row==null){ 
      LayoutInflater inflater = LayoutInflater.from(context);   
      row = inflater.inflate(R.layout.sbooks_row, null); 
      holder = new ViewHolder(); 

      holder.id = (TextView)row.findViewById(R.id.id); 
      holder.title = (TextView)row.findViewById(R.id.title); 
      holder.icon = (ImageView)row.findViewById(R.id.icon); 

      row.setTag(holder); 
     } 
     else 
     { 
      holder = (ViewHolder)row.getTag(); 
     } 

     holder.title.setText(cursor.getString(cursor.getColumnIndex(SBooksDbAdapter.KEY_TITLE))); 
     holder.id.setText(cursor.getString(cursor.getColumnIndex(SBooksDbAdapter.KEY_ROWID))); 

Répondre

3

Vous ne dites pas quelle est l'exception. Je vais le deviner est un NullPointerException, ce qui signifie soit:

  1. Vous n'avez pas un widget dans votre ligne avec android:id="@+id/title" ou
  2. Vous n'avez pas une colonne dans votre jeu de résultats nommé SBooksDbAdapter.KEY_TITLE, ou
  3. d'une certaine manière vous créez des lignes sans support dans sa balise
+0

ma course tout va bien sans « ViewHolder » code, mais quand je modifier mon code pour utiliser « ViewHolder » il jeter exception. Ainsi, le Premier, Seconds peut-être pas ce cas. Et le troisième? Pouvez-vous expliquer clairement? Je ne comprends pas à propos de "créer des lignes sans détenteur"? – Dennie

+0

Encore une fois, vous n'avez pas dit quelle est l'exception, alors vous me forcez à deviner. Une supposition est que c'est une exception NullPointerException. Une chose qui pourrait être nulle est votre variable locale titulaire. Ce serait null si vous avez une ligne dont getTag() retourne null. getTag() retournera null si vous n'avez jamais appelé setTag() sur cette ligne. C'est ce que je veux dire par "créer des rangées sans détenteur". – CommonsWare

+0

Désolé, votre estimation est exactement. quand je débogue mon code Il "dit" NullPointerException ". Et c'est utile si vous me montrez un extrait de code en fonction de mon code ci-dessus. Quoi qu'il en soit, je vais vérifier, merci! – Dennie

Questions connexes