mikael84 Posté(e) 6 mars 2013 Share Posté(e) 6 mars 2013 (modifié) Bonjour à tous, Tout d'abords, merci à ceux qui se donnent la peine de lire ce sujet. J'ai donc un problème qui n'est pas un bug, mais plutôt une façon de procéder. J'ai une activité qui liste des produits, (comme une sorte de boutique), dans une liste et dont on peut choisir les éléments à commander et leurs quantités. J'ai donc une activité qui contient un EditText qui possède un TextWatcher, et une ListView avec un Adapter personnalisé qui hérite de BaseAdapter. Donc à chaque lettre saisie dans l'EditText, les données contenues dans mon Adapter changent. On peut sélectionner un ou plusieurs éléments dans la liste et chaque ligne de la liste contient des boutons (Incrémentation et décrémentation) d'un élément de la ligne (quantité = 0, 1, 2, 3, ...). L’évènement qui modifie la quantité d'une ligne se situe dans l'Adapter, alors que le choix (sélection d'un élément de la liste) se situe dans l'activité (avec OnItemClickListener). Et je voudrais qu'à chaque rechargement de données (qui sont alors nouvelle), les éléments précédemment sélectionnés et les quantités précédemment choisies, restent sélectionnés et les quantités choisies restent aux mêmes valeurs. Comment dois-je procéder ? Faut-il une liste qui contient les données sélectionnées avec leurs quantités, et je met à jour la nouvelle liste ? Ou y-a-t-il une solution plus simple ? Voila, j'espère avoir été clair et je vous remercie d'avance de votre aide ! Ps: Voici quelques extraits de code : Le layout de l'activité : <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="[url="http://schemas.android.com/apk/res/android"]http://schemas.andro...pk/res/android"[/url] android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <EditText android:id="@+building_list/search_box" android:layout_width="wrap_content" android:layout_height="wrap_content" android:hint="Filtrer par référence ou par libellé" android:inputType="textAutoCorrect|none|textAutoComplete|none|textNoSuggestions" android:maxLines="1" android:textSize="20dp" /> <ListView android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_marginLeft="10dp" android:id="@+id/laListeProduit"> </ListView> </LinearLayout> Une partie de l'Adapter : public class AdapterProduit extends BaseAdapter { private List<Produit> lstProduit; private LayoutInflater mInflater; public AdapterProduit(Context context, List<Produit> listP) { lstProduit = listP; mInflater = LayoutInflater.from(context); } public View getView(int position, View convertView, ViewGroup parent) { CheckedLinearLayout layoutItem; if (convertView == null) { layoutItem = (CheckedLinearLayout) mInflater.inflate(R.layout.row_produit, parent, false); final ViewHolderProduit viewHolder; viewHolder = new ViewHolderProduit(); viewHolder.btIncrementQuantite = (Button)layoutItem.findViewById(R.id.btIncrementQuantite); viewHolder.btIncrementQuantite.setonclickListener(new onclickListener() { @Override public void onclick(View v) { Produit p = (Produit) viewHolder.produit.getTag(); p.setQuantite(p.getQuantite()+1); notifyDataSetChanged(); } }); } else { layoutItem = (CheckedLinearLayout) convertView; ((ViewHolderQuantiteProduit) layoutItem.getTag()).btIncrementQuantite.setTag(lstProduit.get(position)); } ViewHolderProduit viewHolder = (ViewHolderProduit) layoutItem.getTag(); viewHolder.quantite.setText(String.valueOf(lstProduit.get(position).getQuantite())); } static class ViewHolderProduit { protected TextView quantite; protected Button btIncrementQuantite; } } Une partie du code du TextWatcher et du AsyncTask qui modifie les données de ma liste : AsyncTask doInBackground => modelProduit = new AdapterProduit(leContext, ProduitJSON.getService().rechercheProduits(leContext, url, params[0])); //params[0] = texte saisi dans l'EditText private TextWatcher filterTextWatcher = new TextWatcher() { public void afterTextChanged(Editable s) { } public void beforeTextChanged(CharSequence s, int start, int count, int after) { } public void onTextChanged(CharSequence s, int start, int before, int count) { //AsyncTask task task.execute(s.toString()); } }; Encore Merci ! Modifié 11 mars 2013 par mikael84 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 7 mars 2013 Share Posté(e) 7 mars 2013 Quand tu crées ton nouvel Adapter contenant les nouvelles données (dans l'AsyncTask), tu pourrais à ce moment là consolider avec les données précédentes (il faut donc que tu en gardes une trace) pour initialiser tes produits avec ce qui a été éventuellement saisi. 1 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
mikael84 Posté(e) 8 mars 2013 Auteur Share Posté(e) 8 mars 2013 (modifié) Bonjour et merci de ta réponse, Désolé de répondre seulement maintenant mais j'étais occupé à faire autre chose. C'est ce que j'avais déjà tenté de faire, mais je pensais qu'il y aurait une solution plus "propre" de faire cela. Je suis actuellement sur la bonne voie, je fais des tests et je reviendrais ici pour mettre le sujet comme résolu, ou pour poser une autre question. Par contre il y a de forte chance que je repasse plutôt lundi. Merci ! Edit: Ok j'ai réussi ! J'ai donc une liste accessible dans depuis mon activité (en static) qui contient tout les objets sélectionnées. A chaque arrivé de nouvelle données, je parcours cette liste et celle de mon adapter, et je met à jour. Ensuite à chaque modification d'une ligne (quantité, etc.), j'ai surchargé la méthode "notifyDataSetChanged" et je met à jour ma liste d'objets sélectionnées grâce à un iterateur. Problème réglé ! Encore merci Par contre, comment je clos le sujet svp ? Modifié 8 mars 2013 par mikael84 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 8 mars 2013 Share Posté(e) 8 mars 2013 L'utilisation d'attributs statiques dans les Activities est à proscrire (notamment parce que le cycle de vie de l'Activity (instanciation/...) est géré par Android). Dans ton cas, un attribut d'instance doit tout aussi bien fonctionner Pour clore le sujet, il te suffit de modifier le titre de ton premier post 1 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
mikael84 Posté(e) 11 mars 2013 Auteur Share Posté(e) 11 mars 2013 Ok merci beaucoup :) , je vais modifier mon code. En attendant je met ce poste en résolu. 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.