BapNesS Posté(e) 27 décembre 2010 Share Posté(e) 27 décembre 2010 Bonsoir/jour, J'ai besoin d'un petit coup de main sur l'application (plus sérieuse que ma dernière en date :-D) sur laquelle je travaille actuellement. J'utilise une ListView custom de ce type : <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="?android:attr/listPreferredItemHeight" android:padding="6dip"> <ImageView android:id="@+id/icon" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_marginRight="6dip" android:src="@drawable/icon" /> <LinearLayout android:orientation="vertical" android:layout_width="0dip" android:layout_weight="1" android:layout_height="fill_parent"> <TextView android:id="@+id/toptext" android:layout_width="fill_parent" android:layout_height="0dip" android:layout_weight="1" android:gravity="center_vertical" /> </LinearLayout> </LinearLayout> L'affichage souhaité ressemble un peu à ça : Cependant, je souhaite remplacer les icônes par les bitmaps que j'ai stockés dans une ArrayList. Je ne sais pas comment faire car les icônes sont censées être des ressources. J'ai lu quelques solutions parlant d'ImageBinder mais je ne vois pas trop comment l'utiliser dans mon adapter : adapter.addSection("Derniers articles", new SimpleAdapter(this, Map<String, String>, R.layout.list_complex_extra, new String[] { ITEM_TITLE, ITEM_BMP }, new int[] { R.id.list_complex_title, R.id.list_complex_bmp })); Références : http://www.softwarep...s-and-adapters/ http://android-franc...s-une-listview/ J'ai essayé d'illustrer un maximum mon code pour avoir un peu d'aide. Merci. :] Lien vers le commentaire Partager sur d’autres sites More sharing options...
Pierre87 Posté(e) 27 décembre 2010 Share Posté(e) 27 décembre 2010 ImageView.setImageBItmap? Lien vers le commentaire Partager sur d’autres sites More sharing options...
BapNesS Posté(e) 30 décembre 2010 Auteur Share Posté(e) 30 décembre 2010 Il n'y a pas possibilité de passer les bitmaps en argument de l'Adapter ? Sinon, je penser passer par setImageBitmap() en effet mais comment boucle sur les items de la liste ? Merci. EDIT Je viens de trouver la fonction getChildAt(int id) : View dans la class ListView. Je pense que ça va faire l'affaire. Lien vers le commentaire Partager sur d’autres sites More sharing options...
BapNesS Posté(e) 3 janvier 2011 Auteur Share Posté(e) 3 janvier 2011 LinearLayout ll; ImageView imageview; for (int i = 1 ; i <= this.ImageLibs.length ; i++) { ll = (LinearLayout) adapter.getView(i, null, null); imageview = (ImageView) ll.getChildAt(0); imageview.setImageBitmap(this.ImageBitmaps[i-1]); } En effectuant une modification de la sorte, ça ne fonctionne toujours pas… Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 3 janvier 2011 Share Posté(e) 3 janvier 2011 Je pense que tu prends le problème du mauvais côté. Ce n'est pas à toi d'itérer sur tes éléments pour renseigner la ListView, c'est celle-ci qui s'en charge. De plus, une ListView n'a qu'un nombre limité de vues filles (correspondant grosso modo à ce qu'elle peut afficher à l'écran), et fait donc du recyclage de vue pour afficher au fur et à mesure les éléments en fonction du scroll. Dans ton cas, je pense qu'il faudrait que tu définisses ton propre Adapter, dérivé de ArrayAdapter par ex., en lui fournissant un ensemble d'objets contenant tes données, et en implémentant la méthode getView Ce qui donnerai: public class MonAdapter extends ArrayAdapter<MonObjet> { public MonAdapter(Context context, int resourceId) { super(context, resourceId); } @Override public View getView(int position, View convertView, ViewGroup parent) { View result = convertView; MonObjet monObjet = getItem(position); if (convertView == null) { result = LayoutInflater.from(getContext()).inflate(R.layout.list_complex_extra, parent, false); } TextView toptext = (TextView)result.findViewById(R.id.toptext); toptext.setText( monObjet.getMaValeur() ); ImageView imageview = (ImageView)result.findViewById(R.id.icon); imageview.setImageBitmap( monObjet.getMaBitmap() ); return result; } } avec la classe MonObjet qui permet de contenir les informations pour une ligne de ta liste public class MonObjet { private String maValeur; private ImageBitmap maBitmap; public String getMaValeur() { return maValeur; } public ImageBitmap getMaBitmap() { return maBitmap; } public MonObjet(String pValeur, ImageBitmap pBitmap) { maValeur = pValeur; maBitmap = pBitmap; } } Ensuite dans le onCreate de ton Activity: ... MonAdapter adapter = new MonAdapter(this, R.layout.list_complex_extra); // Ajout des éléments dans la liste adapter.add(new MonObjet("Premier element", ImageBitmaps[0]) ); ... etc setListAdapter(adapter); ... Et ça devrait marcher (sous réserve de faute de frappe de ma part...) Lien vers le commentaire Partager sur d’autres sites More sharing options...
BapNesS Posté(e) 3 janvier 2011 Auteur Share Posté(e) 3 janvier 2011 Tu t'es bien cassée la tête pour m'aider. Je te remercie. J'ai bien compris le problème et tenterai ta solution des que possible. Merci. EDIT Ok, ça marche impeccablement. Merci pour le coup de main. Je comprends mieux le principe aussi, c'est presque le plus important. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.