0

我已阅读有关此问题的所有帖子,但仍然无法更新我的 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(); 再次。)感谢您的帮助,如果您需要更多信息,请告诉我。

4

1 回答 1

3

ArrayAdapter 中的值实际上并不与文件系统相关联。您需要对被删除的项目调用 remove ,然后您可以调用 notifyDataSetChanged (尽管您可能不需要)。

于 2012-10-20T18:35:38.770 回答