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.
Merci, mais je ne suis pas sûr de savoir comment faire. –
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
Merci! Je vais essayer de faire rapport. –