アダプタは2つの異なるリストを使用しています。最初のリストは、次のように入力されたスーパークラスのリストobject
です。
super(activity, R.layout.laundry_list_item, objects);
もう1つはあなた自身のものです:
private List my;
ListViewのデータを提供するスーパークラスにアイテムを追加するとmy
、アクティビティを再起動するまでこの変更を認識しません。
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();
これらのいずれかがお役に立てば幸いです。