问题
I have [main]Fragment with two ViewPagers in it. Each ViewPager contains several Fragments in it. ViewPager's Fragments obtain data into their ListViews from [main]Fragment. I need to update data in all ListViews, which comes from [main]Fragment.
I've tried to remove current [main]Fragment and add new one (reload it), but when I am calling .remove([main]Fragment) or .detach([main]Fragment) methods in .supportFragmentManager() [main]Fragment is not destroying or detaching, it just hiding and I cant add new one, just make .atach([main]Fragment) for current... Reload activity is bad idea. Please help me.
回答1:
Content Observers
Here's a simple URI that the link doesn't show how to do. Put this in the class that does the data changes so any fragment can access it static via ClassName.CONTENT_URI.
private static final String BASE_PATH = "Imustdorefresh";//see content providers
private static final String AUTHORITY = "somethinguniquehereprobablyappcomname";
public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY
+ "/" + BASE_PATH);
This code goes in fragments onresume see the link don't forget to unregister in onpause
getContentResolver().
registerContentObserver(
CONTENT_URI,
true,
yourObserver);
//yourObserver is code to refresh the fragment {do stuff here code}
In the piece of code that changes the data call the contentresolver notify method after every data change. The content resolver will call the registered observers in the fragments.
getContext().getContentResolver().notifyChange(CONTENT_URI,null);
For more information see content provider and content observer. For more details on a Content Provider
来源:https://stackoverflow.com/questions/25791664/reload-or-notify-fragments-data-in-viewpager