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 に答える