我已阅读有关此问题的所有帖子,但我仍然无法让我的ListView进行更新。 我正在扩展ListActivity。 这是我的ArrayAdapter:
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);
}
现在,当我删除文件时,我希望ListView更新:
@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);
}
}
在我的BindAllSongs()中;方法:
public void BindAllSongs() {
...
...
setListAdapter(allsongs);
}
这很好用(文件正在从SD卡中删除),但列表永远不会更新。当我离开,然后返回ListView时,项目消失了。 (返回ListView再次调用BindAllSongs();) 感谢您的帮助,如果您需要更多信息,请告诉我们。
答案 0 :(得分:3)
ArrayAdapter中的值实际上并不与文件系统相关联。你需要在被删除的项目上调用remove,然后你可以调用notifyDataSetChanged(尽管你可能不需要)。