Android:notifyDataSetChanged不起作用

时间:2012-06-11 04:22:40

标签: android android-listview

我尝试作为练习的购物清单应用程序具有以下活动:

  1. ShoppingListMain - 购物清单列表
  2. ShoppingListActivity - 显示特定购物清单的所有购物清单项目
  3. ListItemEditActivity - 允许用户编辑购物清单项目的详细信息
  4. 当我添加新的购物清单时(在活动#1中),ListView会完美刷新。但是,当我添加一个新的购物清单项目时(在活动#2中),我必须点击后退按钮并返回到我添加新项目的任何购物清单,以便所述项目显示在ListView中。

    我已经尝试了以下帖子中的建议,但仍然没有运气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();
    

1 个答案:

答案 0 :(得分: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()。