2012-06-22 8 views
1

J'ai un listview qui affiche plusieurs données de ma base de données en utilisant l'adaptateur de base dans une classe différente. Je souhaite actualiser ma liste de lecture chaque fois que je supprime ou ajoute un élément à ma base de données.notifyDataSetChanged() ne fonctionne pas pour moi

Voici mon code mais il ne rafraîchit pas ma liste. S'il vous plaît aidez-moi où dois-je mettre le notifyDataSetChanged().

BaseAdapter ad = ((orderadapter)list.getAdapter()); 
ad.notifyDataSetChanged(); 

Merci.

Répondre

1

D'abord, je decalre adaptateur en tant que variable globale:

 public ListAdapter adapter = null; 

Maintenant, j'initialiser mon listview (dans lequel je dois mettre les articles) dans la méthode onCreate(). La disposition de cette ListView est définie dans le fichier xml:

 listView = (ListView)findViewById(R.id.myList); 

Maintenant, je reçois toutes les valeurs à afficher dans un arraylist puis initialiser l'adaptateur avec cette arraylist (vous pouvez utiliser aussi bien toute autre technique de stockage de données):

 adapter = new ListAdapter(availableMessageNotifications,MessageNotificationActivity.this); 
     listView.setAdapter(adapter); 
     listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE); 

Et puis je mis onItemClickListener sur tous les éléments de la liste:

 OnItemClickListener listener = new OnItemClickListener(){ 
     @Override 
     public void onItemClick(AdapterView<?> adapter, View view, int position,long id) { 
     //your code for an item clicked. 
    } 
    listView.setOnItemClickListener (listener); 

J'espère que cela vous aidera.

Vous devez appeler notifyDataSetChanged() du thread d'interface utilisateur:

 yourList.remove(position); 
     runOnUiThread(new Runnable() { 
      public void run() { 
       yourAdapter.notifyDataSetChanged(); 
      } 
     }); 
+0

thnx pour la réponse –

+0

J'utilise une classe BaseAdapter et comment créer un nouvel adaptateur pour appeler notifyDataSetChanged()? C'est mon code BaseAdapter adapter = (BaseAdapter) list.getAdapter(); adapter.notifyDataSetChanged(); –

+0

J'ai modifié ma réponse. S'il vous plaît voir si cela peut vous aider. –

1

J'ai le visage même problème mais maintenant résolu en utilisant le code ci-dessous.

listView.post(new Runnable() { 
     public void run() { 
     adpater.notifyDataSetChanged(); 
     } 
    }); 
Questions connexes