0
我已閱讀所有關於這個問題的帖子,但我仍然無法讓我的ListView更新。 我正在擴展ListActivity。 這裏是我的ArrayAdapter:notifyDataSetChanged不更新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);
}
現在,當我刪除一個文件我想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();) 感謝您的幫助,如果您需要更多信息,請告訴我。
謝謝,但我不知道如何做到這一點。 –
你調用'((ArrayAdapter)getListAdapter())。remove(item)'。你可以用'getListAdapter()。getItem(position)'獲得該項目。您也可以覆蓋適配器的remove方法,並讓該方法刪除該文件並從列表中刪除該項目。 – toadzky
謝謝!我會盡力回報。 –