Aller au contenu

Rafraichissement listview apres fermeture boite de dialog


tomy29

Recommended Posts

Bonjour,

J'ai un petit soucis dans ma gestion de liste.

Le principe, j'affiche une liste à l'écran avec un bouton en bas de l'ecran. Le click sur ce bouton m'affiche une boite de dialogue qui me permet de saisir un nouvel item que je persiste en base.

Mon soucis c'est que je ne sais pas comment raffraichir ma liste une fois la boite de dialogue fermée. Je ne sais pas quelle méthode appeler dans la classe appelante pour intercepter la fermeture de ma boite de dialogue.

Mon code de la classe appelante :

btnCreateList.setOnClickListener(new OnClickListener() {

           @Override
           public void onClick(View arg0) {
               AddItemDialog itemDialog = new AddItemDialog(this, listIngr,ba);                    
           }
       })

Ma classe Dialog :

public AddItemDialog(Context _context, BaseAdapter _ba) {
       super(_context);
       this.context = _context;
       //this.c = _c;        
       this.ba = _ba;
   }

   @Override
   protected void onCreate(Bundle savedInstanceState){
       super.onCreate(savedInstanceState);
       setContentView(R.layout.addlist);
       Button button = (Button) findViewById(R.id.btvalid);
       button.setOnClickListener(this);
       ed = (EditText)findViewById(R.id.etList);
   }


   public void onClick(View _view){
       if (!"".equals(ed.getText())){
           ListShopping ls = new ListShopping();
           ls.setLibelle(ed.getText().toString());
           ba.insertUneShoppingList(ls.getLibelle());
           Cursor c = ba.getAllListShopping();
           SimpleCursorAdapter adapter = new SimpleCursorAdapter(context, R.layout.main, c, new String[]{"libelle"}, new int[]{R.id.tvItemShopping});
//...Je suis resté bloqué ici....//
           dismiss();
       }
   }

Comme vous pouvez le voir j'ai essayé d'implémenter un SimpleCursorAdapter, mais je me suis vite rendu compte que ça ne pouvait pas marcher, ma classe AddItemDialog étend Dialog mais pas ListActivity.

Donc je ne vois pas comment faire.

Si vous avez une solution je suis preneur.

Merci!

Lien vers le commentaire
Partager sur d’autres sites

- Crée une classe spécifique pour ton Adapter de ta ListActivity qui étend Base Adapter.

- Ajoute lui une méthode d'ajout d'un item

- Fournis cet adapter personnalisé à ton dialog

- Dans le onClick du dialog, utilise la méthode d'ajout de l'adapter

- Dans la méthode d'ajout de l'adapter, termine par un appel à notifyDataSetChanged()

Lien vers le commentaire
Partager sur d’autres sites

Tu parles d'une méthode d'ajout dans la base SQlite(oui, j'avais oublié de dire que j'affichais des données d'une table SQlite...)? ou dans une List?

Avant j'utilisais un Adapter qui étendait BaseAdapter, mais avec notifyDatasetChanged(), ma listView ne se mettait pas à jour alors que je mettais bien à jour ma List associée.

D'où l'utilisation du SimpleCursorAdapter fourni par android et de setListAdapter() qui fonctionnent bien tant que je suis dans une ListActivity.

Lien vers le commentaire
Partager sur d’autres sites

Ta ListView récupère son contenu de l'adapter que tu lui as fourni généralement dans le onCreate de ton Activity via setListAdapter.

Je ne vois pas bien comment tu pourrais proprement mettre à jour l'affichage de ta liste en créant un nouvel adapter sur le onlick de ton dialog.

Il faut que tu aies bien en tête la logique du fonctionnement des ListViews :

- La ListView gêre des composants graphiques et la mécanique qui permet d'assurer un scrolling rapide et fluide de ces composants.

- Le contenu de ces composants est fourni par l'adapter auquel est associée la ListView via la méthode getView()

- Par extension, l'adapter peut donc être considéré comme responsable de tout ce qui touche à ton modèle de données, c'est à dire le contenu réel de ta liste

Ce que je te conseillais donc dans mon post précédent, c'est d'implémenter au niveau de ton adapter une méthode d'ajout d'item (ce que tu sembles avoir déjà fait : ba.insertUneShoppingList()) et que la dernière instruction de cette méthode soit un appel à notifyDatasetChanged().

Si cela ne marche pas alors c'est certainement au niveau de ton adapter qu'il y a un problème.

Lien vers le commentaire
Partager sur d’autres sites

Autre truc à voir peut-être, utiliser un OnDismissListener sur ton Dialog pour demander la mise à jour de ta liste via ba.notifyDatasetChanged() dans le onDismiss() de ce listener.

Il est possible que ta liste ne se mette pas à jour car elle est peut-être considérée comme n'étant pas au premier plan tant que le Dialog est affiché.

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...