2012-07-18 47 views
0

我有一个dialogfragment,它将一个项目添加到数据库并立即显示在列表视图中。添加项目后未出现在列表视图中的数据库的最后一项

添加的项目立即显示在列表视图中,但我不知道为什么数据库中的最后一项没有出现。 它在执行显示listview的活动后出现,但不是在通过我的对话框片段添加项目之后。例如,如果我在我的列表视图和数据库中有3个项目“a”,“b”和“d”,并且当我添加“c”,“d”不会显示在列表视图中。它仅在执行显示listview的片段后才会显示。

+0

我对你的描述感到困惑:“该项添加显示在列表视图立即,但我不知道为什么数据库中的最后一项没有出现。”如果你有一个ListView显示“1” - “5”,并且你添加了“6”,会发生什么?此外,这只是一个错字:'f.getmyListAdapter()。notifyDataSetChanged();'它应该是getMyListAdapter()? – Sam 2012-07-18 16:53:28

+0

如果我有一个显示“1” - “5”的列表视图,并且我添加了“4”,则将“4”添加到列表视图并显示,但“5”未显示。 – user1304 2012-07-18 17:12:02

+0

你在问题的最后添加了一个很好的例子!看起来你没有在你的MyListAdapter中保持准确的计数,请张贴这个类。 – Sam 2012-07-18 17:24:33

回答

0

你的适配器使用两种不同的列表,第一个是父类的列表填充为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(); 

希望这些可以帮助一个!

+0

。它迫使应用程序关闭。它在logcat中给我ClassCastException错误。它说,MyItem不能转换为MyList – user1304 2012-07-18 19:41:51

+0

我需要更多的上下文,你试图使用什么代码? – Sam 2012-07-18 19:44:58

+0

第一个。我更新了我的问题上面的代码也与你的代码。 – user1304 2012-07-18 19:53:42

相关问题