我有一个DialogFragment
将项目添加到数据库表的位置。
我还有另一个Fragment
,它有一个ListView
显示数据库中所有项目的位置。我可以将项目添加到数据库中,但它不会立即出现在ListView
从数据库中获取项目的 .
为您创建一个全局变量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));
}
}
你可以使用这个方法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
从您的自定义适配器类创建一个全局对象。
MyListAdapter mAdapter = new MyListAdapter(getActivity(), my);
并设置您的 listView 的适配器:
mListView.setAdapter(mAdapter);
只需在适配器中刷新名为“my”的数组即可。然后调用:
mAdapter.notifyDataSetChanged();
它会做的伎俩...
您必须再次将适配器设置为 listView 这将引发更新
yourAdapter.notifyDataSetChanged();
listView.setAdapter(yourAdapter);