bbo1991 Posté(e) 9 mars 2010 Share Posté(e) 9 mars 2010 Je cherche un moyen simple et élégant pour afficher une liste de personnes et les éditer dans une grille. Cette grille présenterait le nom de la personne + son âge dans un EditView. L'utilisateur aura juste à modifier l'âge sur la grille. Une implémentation très simple: une listview puis appel implémentation du listener onItemSelected + une boîte de dialogue pour éditer la personne sélectionnée. Sauf que moi je veux me passer de cette étape boîte dialogue... Je veux un champ de saisie de l'âge dans laquelle je modifie en direct mes infos. Le problème auquel je suis confronté: si j'utilise un ListView, j'arrive à afficher l'âge dans un EditText mais je n'arrive pas à implémenter correctement un écouteur dessus. J'ai essayé d'implémenter un listener dans ma classe Adapter pour la ListView, j'intercepte bien l'évènement onKey sur l'EditText mais impossible de savoir sur quelle personne je dois modifier l'âge saisi !!! Bref si vous avez des suggestions ... Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
dekans Posté(e) 9 mars 2010 Share Posté(e) 9 mars 2010 avec items.get(position) tu as l'objet (personne je suppose) à la bonne position dans la liste. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
bbo1991 Posté(e) 9 mars 2010 Auteur Share Posté(e) 9 mars 2010 Oui mais pour utiliser items.get(position) j'ai besoin justement de connaître l'argument "position". Or dans mon code j'ai dû faire grosso modo ce genre de choses PersonneArrayAdapter extends ArrayAdapter implements OnKeyListener{ public View getView(int position, View listPersonne, ViewGroup parent){ .... EditText age=(EditText) listePersonne.findViewById(R.id.age); age.setOnKeyListener(this); ..... } public boolen onKeyEvent(...){ Log.i("test","Age modifie"); } } La méthode onKeyEvent (j'me souviens pas très bien du nom exact, là j'ai pas le code sous les yeux) répond bien quand je bouge l'âge mais je n'arrive justement pas à retrouver la "position" de l'item qui a bougé :( Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
popolbx Posté(e) 9 mars 2010 Share Posté(e) 9 mars 2010 méthode simple : implémente le clic long et affiche un menu: - modifier age - supprimer - etc ... Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
dekans Posté(e) 9 mars 2010 Share Posté(e) 9 mars 2010 utilise l'argument comme une variable connue. items.get(position) (écrit tel quel) te donne l'objet personne correspondant à la bonne ligne. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
bbo1991 Posté(e) 9 mars 2010 Auteur Share Posté(e) 9 mars 2010 méthode simple : implémente le clic long et affiche un menu:- modifier age - supprimer - etc ... Tous les tutos sur les listview que j'ai glanés décrivent en effet ce type de solution. Mais moi pour le coup je voudrais accélérer l'interaction homme droid :P en évitant cette étape intermédiaire de saisie à travers un nouveau menu... Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
bbo1991 Posté(e) 9 mars 2010 Auteur Share Posté(e) 9 mars 2010 utilise l'argument comme une variable connue.items.get(position) (écrit tel quel) te donne l'objet personne correspondant à la bonne ligne. Tu veux dire que dans ma classe PersonneArrayAdapter la variable "position" est une variable globale que je peux utiliser dans ma méthode onkeyEvent ??? Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Nivek Posté(e) 9 mars 2010 Share Posté(e) 9 mars 2010 Perso je place dans le tag de la view que je fournis via getView() un élément permettant d'identifier l'item (view.setTag(myItemId)). Ensuite sur le onClick de la view tu fais un view.getTag() pour retrouver ton marqueur. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
bbo1991 Posté(e) 9 mars 2010 Auteur Share Posté(e) 9 mars 2010 Perso je place dans le tag de la view que je fournis via getView() un élément permettant d'identifier l'item (view.setTag(myItemId)).Ensuite sur le onClick de la view tu fais un view.getTag() pour retrouver ton marqueur. Super ça marche nickel, je ne connaissais pas cet attribut Tag :) Merci beaucoup Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Nivek Posté(e) 9 mars 2010 Share Posté(e) 9 mars 2010 Si tu ne connais pas le tag il faut que tu jettes un oeil aux convertViews et le principe des ViewHolders: /** * Make a view to hold each row. * * @see android.widget.ListAdapter#getView(int, android.view.View, * android.view.ViewGroup) */ public View getView(int position, View convertView, ViewGroup parent) { // A ViewHolder keeps references to children views to avoid unneccessary calls // to findViewById() on each row. ViewHolder holder; // When convertView is not null, we can reuse it directly, there is no need // to reinflate it. We only inflate a new View when the convertView supplied // by ListView is null. if (convertView == null) { convertView = mInflater.inflate(R.layout.list_item_icon_text, null); // Creates a ViewHolder and store references to the two children views // we want to bind data to. holder = new ViewHolder(); holder.text = (TextView) convertView.findViewById(R.id.text); holder.icon = (ImageView) convertView.findViewById(R.id.icon); convertView.setTag(holder); } else { // Get the ViewHolder back to get fast access to the TextView // and the ImageView. holder = (ViewHolder) convertView.getTag(); } // Bind the data efficiently with the holder. holder.text.setText(DATA[position]); holder.icon.setImageBitmap((position & 1) == 1 ? mIcon1 : mIcon2); return convertView; } static class ViewHolder { TextView text; ImageView icon; } From : http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/List14.html (voir également les présentations "Turbocharge your ui" de Romain Guy sur youtube). Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
dekans Posté(e) 9 mars 2010 Share Posté(e) 9 mars 2010 voila j'avais fait à partir de cet exemple. Mais je crois que j'ai mis on onCLickListener dans le getView. (je suis pas sûr j'ai les sources au boulot). Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Rejoignez la conversation
Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.