2012-06-11 67 views
0

購物清單應用程序,我試圖作爲一個練習有以下活動:安卓:notifyDataSetChanged不工作

  1. ShoppingListMain - 購物列表的清單
  2. ShoppingListActivity - 一個顯示所有購物對於特定的購物清單列表項目
  3. ListItemEditActivity - 一個能夠讓我添加一個編輯購物清單項目

的細節新的購物清單(在活動#1中),ListView完美刷新。但是,當我添加一個新的購物清單項目(在活動#2中)時,我必須點擊後退按鈕並返回到添加了新項目的購物清單,以使所述項目出現在ListView中。

我已經嘗試了以下post/s中的建議,但仍然沒有運行ShoppingListActivity的ListView。

這個問題的任何幫助,將不勝感激。

,我用於添加新的購物清單中的代碼...

ShoppingListApplication.java

public void insertShoppingList(ShoppingList shoppingList) { 
    assert(shoppingList != null); 

    long id = mDbAdapter.insertShoppingList(shoppingList.getName()); 
    shoppingList.setId(id); 
    mShoppingLists.add(shoppingList); 
} 

ShoppingListMain.java

mNewListAddButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      String name = mNewListName.getText().toString(); 
      ShoppingList newList = new ShoppingList(); 
      newList.setName(name); 

      mApp.insertShoppingList(newList); 

      mNewListName.setText(""); 
      mListAdapter.notifyDataSetChanged(); 
     } 
    }); 

對於添加新項目個人購物清單...

ShoppingListActivity.java

long id = mDbAdapter.insertListItem(mParentListId, 
      item.getDescription(), item.getQuantity(), 
      item.getUnitCost(), item.isPurchased(), 
      item.getNotes()); 
    Log.i("ShoppingList", "New ID " + id); 
    item.setId(id); 

    mListItems.add(item); 
    mListAdapter.notifyDataSetChanged(); 
    setListTotal(); 
+0

你有沒有試過在你的光標上使用'requery()'? (或者不再使用查詢的交換遊標的異步等效方式) – Barak

回答

3
public void insertShoppingList(ShoppingList shoppingList) { 
    assert(shoppingList != null); 
    long id = mDbAdapter.insertShoppingList(shoppingList.getName()); 
    shoppingList.setId(id); 
    mShoppingLists.add(shoppingList); 
    mListAdapter.notifyDataSetChanged(); 
} 

必須調用adapter.notifyDataSetChanged(手動)。

+0

這是ShoppingListActivity的邏輯(將項目添加到購物列表中),而不是ShoppingListMain和ShoppingListApplication(它處理添加購物列表本身)。 – MissPiplup