2012-10-20 6 views
0

J'ai lu tous les messages à propos de ce problème, mais je n'arrive toujours pas à mettre à jour ma ListView. Je développe ListActivity. Voici mon ArrayAdapter:notifyDataSetChanged ne pas mettre à jour ListView

public List<String> songs = new ArrayList<String>();  
public ArrayAdapter<String> allsongs; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    allsongs = new ArrayAdapter<String>(this, 
      R.layout.song_items, songs); 

BindAllSongs();   
ListView listView=getListView(); 
    registerForContextMenu(listView); 
} 

maintenant, lorsque je supprime un fichier que je veux la ListView mise à jour:

@Override 
public boolean onContextItemSelected(MenuItem item) { 
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); 
    switch (item.getItemId()) { 
     case R.id.delete_file: 
      File file = new File(Environment.getExternalStorageDirectory().getPath() + "/AudioStreamRecorder/" + getListView().getAdapter().getItem(info.position).toString()); 
      file.delete(); 

      runOnUiThread(new Runnable() { 
       public void run() { 
        allsongs.notifyDataSetChanged();  
       } 
      }); 

      return true; 
     case R.id.cancel: 

      return true; 
     default: 
      return super.onContextItemSelected(item); 
    } 
} 

Dans mes BindAllSongs(); méthode:

public void BindAllSongs() { 
... 
... 
setListAdapter(allsongs); 
    } 

Cela fonctionne très bien (les fichiers sont supprimés de la carte SD), mais la liste ne met jamais à jour. Lorsque je m'éloigne, puis revenez à la ListView, l'élément est parti. (Retour à la ListView appelle BindAllSongs(); encore une fois.) Merci pour toute aide, si vous avez besoin de plus d'informations faites le moi savoir.

Répondre

3

Les valeurs dans ArrayAdapter ne sont pas réellement liées au système de fichiers. Vous devez appeler remove sur l'élément (s) qui est supprimé et puis vous pouvez appeler notifyDataSetChanged (même si vous n'avez pas besoin de).

+0

Merci, mais je ne suis pas sûr de savoir comment faire. –

+0

vous appelez '((ArrayAdapter) getListAdapter()). Remove (item)'. vous pouvez obtenir l'élément avec 'getListAdapter(). getItem (position)'. vous pouvez également remplacer la méthode remove de l'adaptateur et faire en sorte que cette méthode supprime le fichier et supprime l'élément de la liste. – toadzky

+0

Merci! Je vais essayer de faire rapport. –

Questions connexes