2

我有一个DialogFragment将项目添加到数据库表的位置。

我还有另一个Fragment,它有一个ListView显示数据库中所有项目的位置。我可以将项目添加到数据库中,但它不会立即出现在ListView从数据库中获取项目的 .

4

4 回答 4

0

为您创建一个全局变量MyListAdapter

MyListAdapter adapter;
...

adapter = new MyListAdapter(getActivity(), my);

在它存在的片段中创建一个吸气剂:

public MyListAdapter getAdapter() {

    return adapter;
}

当您在数据库中创建一个新条目时,调用它:

//Make sure you make a tag when you add your fragment
MyFrag f = (MyFrag) getActivity().getSupportFragmentManager()
                .findFragmentByTag(YOURTAGHERE);

f.getAdapter().notifyDataSetChanged();

这应该可以,但是您需要自己进行一些调试/逻辑才能完成。

编辑:这是方法:

public void updateList() {

List<MyItem> l = db.getAllMyItem();

    for(MyItem cn :l )
    {
        cn = l.get(0);
        l.remove(0);
        my.add(new MyList(cn.getName(),0));
    }

}
于 2012-07-17T14:02:33.463 回答
0

你可以使用这个方法yourListAdapter.notifyDataSetChanged(),看这个

编辑 :

您将项目从片段 A 添加到数据库,因此您应该在片段 B 中为您的 listAdapter 创建一个全局变量(包含的那个listView),并通过标记将片段 A 中的片段获取,然后您应该调用:

//when you add the fragmentB to your Activity , make sure you set a Tag for it
FragmentB f = (FragmentB) getActivity().getSupportFragmentManager()
                .findFragmentByTag(TAG_FRAGMENT_B);

f.getMyListAdapter().notifyDataSetChanged();

编辑 2:

在你的CustomListAdapter,添加一个方法来刷新你的对象列表(my):

public void setMyList(List myListOfObjects) {
    this.my = myListOfObjects;
    this.notifyDataSetChanged();
}

然后,当您将新对象添加到数据库时,从数据库中检索所有数据,然后调用:

f.getMyListAdapter().setMyList(newListOfObjects);//newListOFObjects contains the new data 
于 2012-07-17T14:02:38.493 回答
0

从您的自定义适配器类创建一个全局对象。

MyListAdapter mAdapter = new MyListAdapter(getActivity(), my);

并设置您的 listView 的适配器:

mListView.setAdapter(mAdapter);

只需在适配器中刷新名为“my”的数组即可。然后调用:

 mAdapter.notifyDataSetChanged();

它会做的伎俩...

于 2012-07-17T14:23:35.513 回答
0

您必须再次将适配器设置为 listView 这将引发更新

yourAdapter.notifyDataSetChanged();
listView.setAdapter(yourAdapter);
于 2016-02-02T15:17:40.213 回答