Pierre87 Posté(e) 3 mars 2010 Posté(e) 3 mars 2010 Bonjour, Je considère comme acquis la méthode de "adapter optimisé + holder" : public View getView(int position, View convertView, ViewGroup parent) { BluetoothDevicesHolder holder; if (convertView == null) { convertView = this.layoutInflater.inflate(R.layout.bluetoothdevice, null); holder = new BluetoothDevicesHolder(); holder.name = (TextView) convertView.findViewById(R.id.name); holder.address = (TextView) convertView.findViewById(R.id.address); convertView.setTag(holder); } else { holder = (BluetoothDevicesHolder) convertView.getTag(); } BluetoothDevice bluetoothDevice = this.bluetoothDevices.get(position); holder.name.setText(bluetoothDevice.getName()); holder.address.setText(bluetoothDevice.getAddress()); return convertView; } private static class BluetoothDevicesHolder { public TextView name; public TextView address; } J'essaye d'intégrer dans une ListView, 2 type d'éléments (A et B par exemple) Le problème, c'est que je vais avoir 2 layouts (layouta.xml et layoutb.xml) Et donc, 2 "types" de View. Quand ma méthode getView() va me passer "convertView", comment lui demander de me passer le bon type de View ? Si je ne peux pas contrôler le type de View que je reçois, comment distinguer les 2 types ? Merci ! Citer
Pierre87 Posté(e) 3 mars 2010 Auteur Posté(e) 3 mars 2010 Une première idée (de moi), pour vérifier le type de View reçu : placer ce type dans une variable du Holder Citer
Cyril Mottier Posté(e) 3 mars 2010 Posté(e) 3 mars 2010 Tu dois tout simplement implémenter des méthodes comme getViewType(int position) et getViewTypeCount(). Si tout est ok, la méthode getView te fournira tout simplement le bon type de convertView. Pour ce qui est du ViewHolder, tu peux soit en faire tout simplement 2 différents soit faire un gros ViewHolder qui regroupe tous tes attributs pour les vues 1 et 2 (il y aura probablement des attributs inutiles mais ça ne prend pas de place ... ce ne sont que des références :p). Citer
Pierre87 Posté(e) 3 mars 2010 Auteur Posté(e) 3 mars 2010 Rhaaaaaaaa t'es trop génial ! ça m'apprendra à pas lire la doc à fond ! :s Effectivement, j'aurais des attributs en commun dans mes 2 types donc 1 seul holder est suffisant, comme tu le dis Merci encore pour ta réponse rapide ! (et j'éviterai de te déranger en direct la prochaine fois :P) Citer
Profete162 Posté(e) 3 mars 2010 Posté(e) 3 mars 2010 Tu pourras poster la solution en code? J'ai toujours du mal avec le jargon développeur :-p Citer
Pierre87 Posté(e) 3 mars 2010 Auteur Posté(e) 3 mars 2010 oui bien sûr http://code.google.com/p/premotedroid/source/browse/ mais j'ai pas commencé à coder là :P et ça sera un peu "lourd" car très adapté à mon application Mais la réponse de Cyril est très claire ! http://developer.android.com/intl/fr/reference/android/widget/Adapter.html Moi je cherchais du côté de ArrayAdapter -.- Citer
Cyril Mottier Posté(e) 3 mars 2010 Posté(e) 3 mars 2010 @Profete162 : J'ai déjà songé à rédiger un article sur la façon de créer une ListView personnalisée mais je m'étais dit "Non, ça a été rabaché et rabaché, tout le monde sait comment faire maintenant". On dirait qu'un tel article pourrait toujours avoir une utilité :). Je tacherais d'y songer. Citer
Pierre87 Posté(e) 3 mars 2010 Auteur Posté(e) 3 mars 2010 ben la ListView personnalisée, je maitrise :P le problème, c'était la ListView avec des types d'éléments différents ! Citer
Profete162 Posté(e) 3 mars 2010 Posté(e) 3 mars 2010 @Profete162 : J'ai déjà songé à rédiger un article sur la façon de créer une ListView personnalisée mais je m'étais dit "Non, ça a été rabaché et rabaché, tout le monde sait comment faire maintenant". On dirait qu'un tel article pourrait toujours avoir une utilité :). Je tacherais d'y songer. Bien si, j'arrive à faire des listview avec plein de textes, plein d'images, mais par exemple j'ai du mal pour changer le fond une ligne sur 2 comme Pierre Citer
Pierre87 Posté(e) 3 mars 2010 Auteur Posté(e) 3 mars 2010 Changer le fond une ligne sur 2, c'est pas vraiment plus compliqué qu'une ListView classique. Comme dans le getView(), tu as la position... tu peux facilement le deviner ! Dans ton cas, tu as toujours 1 seul type. Mais n types d'éléments différents, c'est autrement plus compliqué imo Citer
Pierre87 Posté(e) 4 mars 2010 Auteur Posté(e) 4 mars 2010 @Profete162 : http://code.google.com/p/premotedroid/source/browse/trunk/PRemoteDroid%20Client/src/org/pierre/remotedroid/client/activity/ConnectionListActivity.java J'ai pas testé encore le code (j'ai rien écris pour ajouter des connections) mais c'est dans l'idée :P mail/msn si t'as besoin d'aide pour comprendre Citer
Pierre87 Posté(e) 4 mars 2010 Auteur Posté(e) 4 mars 2010 j'ai apporté un ptit fix à l'adapter (bug de copier coller) mais sinon il semble marcher ! j'ai ajouté des éléments "à la main", et ça gère facilement plusieurs centaines d'éléments Citer
Cyril Mottier Posté(e) 5 mars 2010 Posté(e) 5 mars 2010 @Pierre87 : Ton code de getView pourrait être plus "simple" en factorisant le code. En effet, tu effectue exactement le même travail (avec les instance of) dans getView que celui que tu fais dans getItemViewTyype(). En général, une méthode getView consite à faire directement final int type = getItemViewType(position) puis de faire un switch sur type ;) Citer
Profete162 Posté(e) 5 mars 2010 Posté(e) 5 mars 2010 Si tu changes ton code, remets l'ancien en commentaire, cela permettra de voir l'évolution et améliorations, c'est peut être plus instructif qu'un code "propre" du premier coup! Citer
Pierre87 Posté(e) 5 mars 2010 Auteur Posté(e) 5 mars 2010 @Cyril : merci de l'astuce ! j'y avais pas pensé :] @Profete162 : c'est un depot SVN, donc il garde trace de toutes les modifications si t'as besoin d'aide pour le configurer / recuperer les données, contactes moi par mail/msn Citer
Profete162 Posté(e) 5 mars 2010 Posté(e) 5 mars 2010 (modifié) Merci, je suis pas encore habitué au SVN.. ca m'aura couté un point karma... Merci pour l'info et tes efforts pour aider, c'est super sympa! Modifié 5 mars 2010 par Profete162 Citer
Pierre87 Posté(e) 5 mars 2010 Auteur Posté(e) 5 mars 2010 si t'as envie que je t'aide à le configurer en direct, ajoutes moi sur msn, c'est la meme adresse que mon mail Citer
Recommended Posts
Rejoignez la conversation
Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.