Android-如何在通过dialogfragment将项目添加到数据库后刷新我的listview

Android-如何在通过dialogfragment将项目添加到数据库后刷新我的listview,android,sql,database,Android,Sql,Database,我有一个DialogFragment,从中我将项目添加到数据库表中 我还有另一个片段,它有一个列表视图,我在其中显示数据库中的所有项目。 我可以将项目添加到数据库中,但它不会立即出现在从数据库获取项目的ListView上。为MyListAdapter创建一个全局变量 在存在的片段中创建一个getter: public MyListAdapter getAdapter() { return adapter; } 在数据库中创建新条目时,请调用: //Make sure you make

我有一个DialogFragment,从中我将项目添加到数据库表中

我还有另一个片段,它有一个列表视图,我在其中显示数据库中的所有项目。
我可以将项目添加到数据库中,但它不会立即出现在从数据库获取项目的ListView上。

为MyListAdapter创建一个全局变量

在存在的片段中创建一个getter:

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));
    }

}

为MyListAdapter创建全局变量

在存在的片段中创建一个getter:

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中,添加一个方法来刷新我的对象列表:

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

f.getMyListAdapter().setMyList(newListOfObjects);//newListOFObjects contains the new data 
您可以使用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中,添加一个方法来刷新我的对象列表:

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

f.getMyListAdapter().setMyList(newListOfObjects);//newListOFObjects contains the new data 

从自定义适配器类创建全局对象

MyListAdapter mAdapter = new MyListAdapter(getActivity(), my);
并设置listView的适配器:

mListView.setAdapter(mAdapter);
只需在适配器中刷新名为my的数组。 然后打电话:

 mAdapter.notifyDataSetChanged();

它将完成以下任务…

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

MyListAdapter mAdapter = new MyListAdapter(getActivity(), my);
并设置listView的适配器:

mListView.setAdapter(mAdapter);
只需在适配器中刷新名为my的数组。 然后打电话:

 mAdapter.notifyDataSetChanged();

它会起作用的…

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

yourAdapter.notifyDataSetChanged();
listView.setAdapter(yourAdapter);

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

yourAdapter.notifyDataSetChanged();
listView.setAdapter(yourAdapter);

你能给我们看一下你的MyListAdapter吗?你能给我们看一下你的MyListAdapter吗?我试过使用它,但是它给出了一个错误,notifydatasetchanged是未定义的。在onclickit之后,我尝试在dialogfragment类中使用它,它是未定义的,因为您在一个不是ListAdPath的实例上调用了它?您使用哪个sdk版本???我用satriano的更新了代码,这与您的类似,但我的列表仍然没有刷新。我是否在正确的位置使用了notifydatasetchanged?应该在add:之后调用notifydatasetchanged,因此请刷新您称之为my的列表,然后调用notifydatasetchanged方法,但没有发生任何事情。如何在调用noifydatasetchanged之前刷新列表我已经尝试过使用它,但它给出了一个错误,notifydatasetchanged未定义。在onclickit之后,我尝试在dialogfragment类中使用它,它是未定义的,因为您在一个不是ListAdPath的实例上调用了它?您使用哪个sdk版本???我用satriano的更新了代码,这与您的类似,但我的列表仍然没有刷新。我是否在正确的位置使用了notifydatasetchanged?应该在add:之后调用notifydatasetchanged,因此请刷新您称之为my的列表,然后调用notifydatasetchanged方法,但没有发生任何事情。在适配器中调用noifydatasetchanged refresh array之前如何刷新列表,我不理解这一部分?你能再解释一下吗?你的列表视图只显示你的数组中你发送给你的arrayAdapter的项目,这是我在你的情况下。。。您只需要删除我的数组中的项并添加新项,或者只添加一项。。。你要什么都行。然后调用notifyDataSetChanged,这样您的arrayAdapter就会知道列表项已更改…刷新适配器中的数组,我不明白那个部分?你能再解释一下吗?你的列表视图只显示你的数组中你发送给你的arrayAdapter的项目,这是我在你的情况下。。。您只需要删除我的数组中的项并添加新项,或者只添加一项。。。你要什么都行。然后调用notifyDataSetChanged,这样您的arrayAdapter就会知道列表项已更改…我用它更新了代码,但仍然没有出现错误
ors,但它不会立即刷新我的列表,不会发生任何事情。再次查看代码后,需要使用数据库更新我的列表。创建一个执行此操作的公共方法,并将其与notifyDataSetChangedi一起调用。我用此方法更新了代码,但仍然没有出现错误,但它没有立即刷新我的列表,什么都没有发生。再次查看代码后,您需要使用数据库更新我的列表。创建一个执行此操作的公共方法,并将其与notifyDataSetChanged一起调用