我有一个dialogfragment,它将一个项目添加到数据库并立即显示在列表视图中。添加项目后未出现在列表视图中的数据库的最后一项
添加的项目立即显示在列表视图中,但我不知道为什么数据库中的最后一项没有出现。 它在执行显示listview的活动后出现,但不是在通过我的对话框片段添加项目之后。例如,如果我在我的列表视图和数据库中有3个项目“a”,“b”和“d”,并且当我添加“c”,“d”不会显示在列表视图中。它仅在执行显示listview的片段后才会显示。
我有一个dialogfragment,它将一个项目添加到数据库并立即显示在列表视图中。添加项目后未出现在列表视图中的数据库的最后一项
添加的项目立即显示在列表视图中,但我不知道为什么数据库中的最后一项没有出现。 它在执行显示listview的活动后出现,但不是在通过我的对话框片段添加项目之后。例如,如果我在我的列表视图和数据库中有3个项目“a”,“b”和“d”,并且当我添加“c”,“d”不会显示在列表视图中。它仅在执行显示listview的片段后才会显示。
你的适配器使用两种不同的列表,第一个是父类的列表填充为object
:
super(activity, R.layout.laundry_list_item, objects);
另一种是你自己:
private List my;
当您添加一个项目my
为您的ListView提供数据的超类,直到重新启动活动时才会知道此更改。
尝试改变您Save
按钮,这样的:
nam = name.getText().toString();
pri = price.getText().toString();
i = new MyItem(nam, Double.parseDouble(pri));
db.addMyItem(i);
MyActivity f = (MyActivity) getActivity().getFragmentManager().findFragmentByTag("my");
f.getMyListAdapter().add(i);
// You might need this, but I believe the adapter will update itself in add()
//f.getMyListAdapter().notifyDataSetChanged();
getDialog().dismiss();
这将使用超名单,并避免你的问题。
或者用你发布的代码,我相信SimpleCursorAdapter是比你自己的适配器更好的选择。
在您的片段:
public void onCreate() {
...
// Retrieve a Cursor of every row in the database, "SELECT _id, name, quantity FROM Table"
mCursor = db.getAllMyItemsCursor();
madapter = new SimpleCursorAdapter(this, R.layout.laundry_list_item, cursor,
new String[] { "name", "quantity" },
new int[] { R.id.item_name, R.id.item_qty });
}
public void updateListView() {
mCursor.requery();
madapter.notifyDataSetChanged();
}
在Save
按钮:
nam = name.getText().toString();
pri = price.getText().toString();
db.addMyItem(new MyItem(nam, Double.parseDouble(pri)));
MyActivity f = (MyActivity) getActivity().getFragmentManager().findFragmentByTag("my");
f.updateListView();
希望这些可以帮助一个!
我对你的描述感到困惑:“该项添加显示在列表视图立即,但我不知道为什么数据库中的最后一项没有出现。”如果你有一个ListView显示“1” - “5”,并且你添加了“6”,会发生什么?此外,这只是一个错字:'f.getmyListAdapter()。notifyDataSetChanged();'它应该是getMyListAdapter()? – Sam 2012-07-18 16:53:28
如果我有一个显示“1” - “5”的列表视图,并且我添加了“4”,则将“4”添加到列表视图并显示,但“5”未显示。 – user1304 2012-07-18 17:12:02
你在问题的最后添加了一个很好的例子!看起来你没有在你的MyListAdapter中保持准确的计数,请张贴这个类。 – Sam 2012-07-18 17:24:33