2012-10-20 109 views
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();) 感謝您的幫助,如果您需要更多信息,請告訴我。

回答

3

ArrayAdapter中的值實際上並不與文件系統綁定。你需要調用刪除的項目刪除,然後你可以調用notifyDataSetChanged(儘管你可能不需要)。

+0

謝謝,但我不知道如何做到這一點。 –

+0

你調用'((ArrayAdapter)getListAdapter())。remove(item)'。你可以用'getListAdapter()。getItem(position)'獲得該項目。您也可以覆蓋適配器的remove方法,並讓該方法刪除該文件並從列表中刪除該項目。 – toadzky

+0

謝謝!我會盡力回報。 –

相關問題