2011-10-03 4 views
0

J'ai besoin d'un peu d'aide avec mon adaptateur de liste personnalisée. J'utilise l'exemple de l'adaptateur de vogella.de, mais je dois trouver un moyen de définir le texte et l'image de la base de données sqlite. Voici le code de l'adaptateur que j'utilise:Android listview adaptateur afficher le texte de sqlite

import android.app.Activity; 
import android.database.Cursor; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.ImageView; 
import android.widget.TextView; 

public class MyArrayAdapter extends ArrayAdapter<String> { 
    private final Activity context; 
    private final String[] names; 
    Cursor cursor; 

    public MyArrayAdapter(Activity context, String[] names) { 
     super(context, R.layout.main_listview, names); 
     this.context = context; 
     this.names = names; 
    } 

    // static to save the reference to the outer class and to avoid access to 
    // any members of the containing class 
    static class ViewHolder { 
     public ImageView imageView; 
     public TextView textView,textView2; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // ViewHolder will buffer the assess to the individual fields of the row 
     // layout 

     ViewHolder holder; 
     // Recycle existing view if passed as parameter 
     // This will save memory and time on Android 
     // This only works if the base layout for all classes are the same 
     View rowView = convertView; 
     if (rowView == null) { 

      LayoutInflater inflater = context.getLayoutInflater(); 
      rowView = inflater.inflate(R.layout.main_listview, null, true); 

      holder = new ViewHolder(); 
      holder.textView = (TextView) rowView.findViewById(R.id.main_name); 
      holder.textView2 = (TextView) rowView.findViewById(R.id.main_info); 
      holder.imageView = (ImageView) rowView.findViewById(R.id.main_img); 
      rowView.setTag(holder); 

     } else { 
      holder = (ViewHolder) rowView.getTag(); 
     } 
     final Bitmap b = BitmapFactory.decodeFile("/sdcard/52dde26940e0d3081f6a086d4b54cd1c.jpg", null); 

     holder.textView.setText(""); 
     holder.textView2.setText(""); 
     holder.imageView.setImageBitmap(b); 


     return rowView; 
    } 

    public String[] getNames() { 
     return names; 
    } 
} 

Et je suis en train de mettre le texte à une vue de texte comme celui-ci:

String sql = "SELECT title FROM collections"; 
     Cursor cursorTitle = userDbHelper.executeSQLQuery(sql); 
     if(cursorTitle.getCount()==0){ 
      Log.i("Cursor Null","CURSOR TITLE NULL"); 
     } else if(cursorTitle.getCount()>0){ 
      cursorTitle.moveToFirst(); 
      String text = cursorTitle.getString(cursorTitle.getColumnIndex("title")); 
      Log.i("title text","title text : "+text); 
      String[] names = new String[] { text }; 
      listView.setAdapter(new MyArrayAdapter(this, names)); 
} 

, mais quand je lance ce code, je n » En conséquence, j'obtiens quelque chose dans ma listview.

Donc, quelqu'un peut me suggérer comment puis-je définir le texte et l'image en imageview et textview dans mon activité en utilisant cet adaptateur.

Merci beaucoup!

+0

des erreurs dans le logcat? le curseur est-il vide? avez-vous des données dans vos tables sqlite? vous définissez le texte en tant que "". cette image ne peut pas exister dans votre carte SD ... –

+0

Je ne reçois aucune erreur dans mon Logcat, l'image est dans la carte SD, je n'ai pas de problème avec elle. J'ai des données dans mes tables, et le curseur n'est pas vide . –

Répondre

0

Essayez de faire quelque chose comme ceci:

MyAddapterClass:

private final Activity context; 
    private final String[] names; 
    private final Bitmap image; 
    private final String text; 
    private final String text2; 
    Cursor cursor; 

    public MyArrayAdapter(Activity context, String[] names, Bitmap image, String text, String text2) { 
     super(context, R.layout.main_listview, names); 
     this.context = context; 
     this.names = names; 
     this.image = image; 
     this.text = text; 
     this.text2 = text2; 
    } 

et mettre image, text et text2 à vos supports:

holder.textView.setText(text); 
    holder.textView2.setText(text2); 
    holder.imageView.setImageBitmap(image); 

et l'initialiser dans vos Activity.That de il.

J'espère que ça aide!

0

Check this out

String text = cursorTitle.getString(cursorTitle.getColumnIndex("title")); 
Log.i("title text","title text : "+text); 
String[] names = new String[] { text }; 

Quel est le résultat du 'texte' dans LogCat? Toute valeur stockée dans un tableau 'noms'?

+0

Le résultat est: "Exemple de texte" - comme dans ma base de données sqlite. Le 'cursor' et le' text' ne sont pas nuls. –

0

Où avez-vous utilisé le tableau String dans l'adaptateur, vous l'avez passé? Je pense que vous définissez null dans vos deux textviews. Vous devez l'utiliser comme holder.textview.setText (noms [position]) dans votre adaptateur. Et deuxième chose, vous devez utiliser pour la boucle pour créer votre tableau de chaînes à partir du curseur. Il semble que vous obtiendrez toujours le premier résultat de vos données de curseur.

Questions connexes