2011-04-06 61 views
1

我有一個ListAdapter這是用來顯示在Listview列表。現在我添加了一個longpress菜單操作來刪除任何選定的項目。Android的ListAdapter沒有更新

public boolean onContextItemSelected(MenuItem item) { 

     AdapterView.AdapterContextMenuInfo menuInfo = (AdapterView.AdapterContextMenuInfo) item 
       .getMenuInfo(); 
     final Long wordId = menuInfo.id; 
     // selected_row = menuInfo.position; 

     // To get the id of the clicked item in the list use menuInfo.id 
     switch (item.getItemId()) { 
     case CONTEXT_DELETE: 
      deleteRes(wordId); // delete function for the item 
      break; 
     default: 
      return super.onContextItemSelected(item); 

     } 
     //((BaseAdapter) favAdapter).notifyDataSetChanged(); 
     return true; 
    } 

但是在刪除後,列表正在更新並顯示帶有已刪除項目的舊列表。我嘗試使用notifyDataSetChanged(),但它不起作用。概率的解決方案是什麼?

+0

你確定底層的數據是通過'deleteRes(wordId);'來刪除嗎? – xandy 2011-04-06 06:22:04

+0

數據正在被正確刪除......如果我去另一個區域......並回到那個區域......它會給出正確的列表。 – 2011-04-06 06:33:38

+0

也許你可以發佈更多的代碼,比如適配器,看看有什麼問題。 – xandy 2011-04-06 07:41:19

回答

1

我用下面的代碼和問題是解決了。

favCursor = wordDataHelper.getCursorFav(); 
((SimpleCursorAdapter) favAdapter).changeCursor(favCursor); 
+0

請詳細說明你是如何解決這個問題的?我有同樣的問題。我已經發布我的代碼在http://stackoverflow.com/questions/23512776/listview-not-upadated-properly-after-deletion-in-android-fragment。謝謝。 – user2011302 2014-05-09 03:19:11

0

從數組/列表中刪除項目,然後將數組/列表分配給適配器,然後寫入notifyDataSetChanged()。

+0

沒有數組或列表。它是一個Cursor,它提供給favAdapter(它是一個ListAdapter),使用「ListAdapter favAdapter = new SimpleCursorAdapter(this,android.R.layout.simple_list_item_1,favCursor,new String [] {WordDataHelper.ENGWORD},new int [ ] {android.R.id.text1});「 – 2011-04-06 06:38:03

0

從列表中刪除項目後,必須通過對數據庫執行新查詢來獲取新的遊標。然後,您可以通過以新光標作爲參數調用changeCursor()來更改SimpleCursorAdapter(CursorAdapter)的光標。

0

使用getListView()。invalidateViews刪除後。

0
  1. 從數據庫查詢
  2. 刪除該項目得到一個新的光標,或者重新查詢舊adapter.getCursor().requery()
  3. 呼叫adapter.notifyDatasetChanged
+0

我認爲不應該使用repery()。 – Flo 2011-04-06 17:28:09

+0

就這樣。無論如何,從未使用過它。 – 2011-04-06 17:40:11

0

嘗試使用notifyDataSetChanged方法,它應該工作。

adapter.notifyDataSetChanged(); 

但是,有時會失敗。如果它失敗了,那麼用新的列表元素重新初始化該章節。這個對我有用。

adapter = new ArrayAdapter<Item>(getApplicationContext(),android.R.layout.simple_list_item_1, itemList); 
setListAdapter(adapter);