Aller au contenu

Créer une listview spécifique puis la modifier après sa création


Aweb

Recommended Posts

Bonjour,

Je suis assez nouveau dans le développement Android, je n'ai pour m'aider qu'un livre assez mal fichu ("Programmation Android" chez Eyrolles) qui explique assez mal comment faire.

Commençons par le début, je souhaiterai juste afficher une liste de galeries d'images avec un titre, une description en dessous de celui-ci et une image sur la droite.

Je sais qu'il faut utiliser un Adapter mais je ne sais pas du tout comment cela fonctionne (un simple tuto m'aiderait beaucoup, je n'en ai pas vraiment trouvé d'assez explicatif...)

Ensuite, l'image pour chaque galerie étant sur internet, je souhaiterai la télécharger et l'afficher après la création de la liste afin que l'utilisateur puisse interagir avec assez rapidement. Télécharger une image et la transformer en bitmap semble assez simple, mais comment rempalcer l'image "par défaut" que j'aurai inséré lors de la création de ma liste ?

Merci beaucoup pour votre aide, je vous en serai très reconnaissant !

Aweb

Lien vers le commentaire
Partager sur d’autres sites

Bonjour Aweb,

Voici quelques éléments de réponses.

- Pour créer chaque item de ta vue, tu dois créer un layout spécifique. Tu trouveras des exemples qui correspondent à ton besoin ici.

- Pour l'adapter, tu peux utiliser des Adapter déjà tout fait (comme SimpleAdapter) mais le mieux est peut-être d'étendre d'un BaseAdapter pour faire ta propre implémentation.

Ci-dessous un exemple que j'ai fait, il affiche l'icône et le nom de la liste des ResolveInfo passés au constructeur :

public class ResolveInfoListAdapter extends BaseAdapter{

   private final PackageManager mPackageManager;

   private final List mResolveInfos;

   private final LayoutInflater mInflater;

   public ResolveInfoListAdapter(Context context, List resolveInfos) {
       mPackageManager=context.getPackageManager();
       mResolveInfos=resolveInfos;
       mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
   }

   @Override
   public ResolveInfo getItem(int position) {
       return mResolveInfos.get(position);
   }

   @Override
   public int getCount() {
       return mResolveInfos.size();
   }

   @Override
   public long getItemId(int position) {
       return position;
   }

   @Override
   public View getView(int position, View convertView, ViewGroup parent) {
       View layout = (View)mInflater.inflate(R.layout.image_one_line_list_item, parent, false);

       ResolveInfo resolveInfo=getItem(position);

       ImageView imageView=(ImageView)layout.findViewById(android.R.id.icon1);
       imageView.setImageDrawable(resolveInfo.loadIcon(mPackageManager));

       TextView textView=(TextView)layout.findViewById(android.R.id.text1);
       textView.setText(resolveInfo.loadLabel(mPackageManager));

       return layout;
   }
}

- Pour charger ton image de manière asynchrone, le mieux est d'utiliser AsyncTask dans la méthode getView. L'idée est de charger l'image dans AsyncTask#doInBackground et de rafraîchir ton ImageView dans AsyncTask#onPostExecute (sans oublier de mettre à jour l'adapteur avec BaseAdapter#notifyDataSetChanged).

Bien sur la gestion d'un cache est la bienvenue pour éviter de recharge tes images à chaque défilement de la liste.

En espérant que cela puisse t'aider.

Bon courage,

ichpa

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...