2009-08-20 9 views
2

J'utilise ce code pour obtenir l'élément du curseur, mais il renvoie juste un élément sur ma liste. Alors, comment puis-je obtenir tous les éléments de ma liste, c'est mon code?Obtenir tous les éléments du curseur dans android

class MyAdapter extends SimpleCursorAdapter 
{ 
    private Context context; 

    public MyAdapter(Context context, int layout, Cursor c, String[] from, int[] to) 
    { 
     super(context, layout, c, from, to); 
     this.context = context; 

    } 
    public View getView(int position, View convertView, ViewGroup parent){ 
     Cursor cursor = getCursor(); 

     LayoutInflater inflater = ((Activity) context).getLayoutInflater();   
     View v = inflater.inflate(R.layout.sbooks_row, null);   
     TextView title = (TextView)findViewById(R.id.title); 
     if(title != null){ 
      int index = cursor.getColumnIndex(SBooksDbAdapter.KEY_TITLE); 
      String type = cursor.getString(index); 
      title.setText(type); 
     } 

     TextView lyrics = (TextView)findViewById(R.id.lyrics); 
     if(lyrics != null){ 
      int index = cursor.getColumnIndex(SBooksDbAdapter.KEY_LYRICS); 
      String type = cursor.getString(index); 
      lyrics.setText(type); 
     } 

     ImageView im = (ImageView)findViewById(R.id.icon); 
     if(im!=null){ 
      int index = cursor.getColumnIndex(SBooksDbAdapter.KEY_FAVORITE); 
      int type = cursor.getInt(index); 
      if(type==1){ 
       im.setImageResource(android.R.drawable.btn_star_big_on); 
      } 
      else{ 
       im.setImageResource(android.R.drawable.btn_star_big_off); 
      } 
     } 

     return v; 
    } 

Répondre

5

CursorAdapter se comporte un peu différent de celui des autres adaptateurs de liste - au lieu de getView(), la magie se passe ici dans NewView() et Bindview(), donc je pense getView() n'est pas le droit méthode à remplacer.

Vous pouvez obtenir un seul résultat, car après la création de la première ligne, CursorAdapter attend bindView() pour insérer de nouvelles données et réutiliser la ligne déjà gonflée, et vous vous attendez à ce que getView() le fasse.

Je vous suggère d'essayer de déplacer votre code vers newView() pour gonfler votre vue, et bindView() pour exécuter la logique actuelle de remplissage des lignes.

Bonne chance, et tenez-nous au courant des résultats.

+0

Bonjour, j'essaie d'éditer mon code avec vos conseils. J'utilise les fonctions newView(), bindView() et It retourne tous les éléments. Mais j'ai toujours un problème dans ma Listview, il n'est pas vraiment normal. Je veux dire, il affiche différent quand je fais glisser la barre de haut en bas. Puis-je avoir oublié quelque chose? – Dennie

+0

Que voulez-vous dire par les articles ne s'affichent pas normalement? Si vous voyez de vieux objets apparaître, au lieu de nouveaux (avec l'adaptateur normal), votre logique de recyclage devrait rencontrer un problème (bindView()). Je vous recommande également d'utiliser le pattern ViewHolder, comme expliqué ici: http://www.youtube.com/watch?v=N6YdwzAvwOA à 0:09:02. –

+0

Ce lien vidéo est très utile pour tous ceux qui veulent comprendre ce qui se passe sous ListView. Merci Dimitar! –

0

Je suppose le curseur retourné par la méthode getCursor() récupère correctement toutes les lignes de votre table, vous devez explicitement déplacer le curseur sur une position avant d'accéder aux données d'une ligne, donc à la début de votre méthode getView(), vous devez appeler.

cursor.moveToPosition(position); 
+0

Il retourne toujours un article! Je pense que ça ne marche pas ici. – Dennie