i have a MainActivity with x number of fragments , switching between them using a viewpager. Each one of them making a network request using AsyncTaskLoader to retrieve some data.
doing the network request and retrieve the data is done for each fragment , and all fragments shows the correct data
The problem is : when i switching from Fragment_1 to Fragment_2 , and trying to go back to Fragment_1 , the data which was in Fragment_1 is Not Exist any more!!! How that come ???
Here are sample of my code :
MainActivity
ViewPager mviewpager = (ViewPager) findViewById(R.id.homeScreen_section_2_viewpager);
SimpleFragmentPagerAdapter mFragmentAdapter = new SimpleFragmentPagerAdapter(this, getSupportFragmentManager());
mviewpager.setAdapter(mFragmentAdapter);
// find the tab layout that shows the tabs
android.support.design.widget.TabLayout tabLayout = (android.support.design.widget.TabLayout) findViewById(R.id.homeScreen_section_2_sliding_tabs);
tabLayout.setupWithViewPager(mviewpager);
tabLayout.setTabMode(tabLayout.MODE_SCROLLABLE);
FragmentPagerAdapter
public class SimpleFragmentPagerAdapter extends FragmentPagerAdapter {
private Context mContext;
public SimpleFragmentPagerAdapter(Context context, FragmentManager fm) {
super(fm);
mContext = context;
}
@Override
public int getCount() {
return 5;
}
@Override
public CharSequence getPageTitle(int position) {
if (position == 0) {
return mContext.getString(R.string.category_Upcoming);
} else if (position == 1) {
return mContext.getString(R.string.category_Latest);
} else if (position == 2) {
return mContext.getString(R.string.category_NowPlaying);
} else if (position == 3) {
return mContext.getString(R.string.category_TopRated);
} else
return mContext.getString(R.string.category_Popular);
}
@Override
public android.support.v4.app.Fragment getItem(int position) {
if (position == 0) {
return new UpComingFragment();
} else if (position == 1) {
return new LatestFragment();
} else if (position == 2) {
return new NowPlayingFragment();
} else if (position == 3) {
return new TopRatedFragment();
} else
return new PopularFragment();
}
}
Fragment_1
// Get a reference to the LoaderManager, in order to interact with loaders.
loaderManager = getActivity().getSupportLoaderManager();
loaderManager.initLoader(List_item_LOADER_ID, null, List_Item_loaderCallbacks);
private android.support.v4.app.LoaderManager.LoaderCallbacks<List<Movie>> List_Item_loaderCallbacks
= new android.support.v4.app.LoaderManager.LoaderCallbacks<List<Movie>>() {
@Override
public android.support.v4.content.Loader<List<Movie>> onCreateLoader(int id, Bundle bundle) {
if (id == List_item_LOADER_ID) {
return new MovieLoader(getActivity(), TOP_RATED_REQUEST_URL);
} else
return null;
}
@Override
public void
onLoadFinished(android.support.v4.content.Loader<List<Movie>> loader, List<Movie> data) {
loadingIndicator.setVisibility(View.GONE);
emptyTextView.setText("Empty Movies List ");
// Clear the adapter of previous Movies data
mAdapter.clear();
trailers_List.clear();
movies_IDs_list.clear();
// If there is a valid list of {@link Movie}s, then add them to the adapter's
// data set. This will trigger the ListView to update.
if (data != null && !data.isEmpty()) {
int size = data.size();
for (int i = 0; i < size; i++) {
movies_IDs_list.add(data.get(i).getMovie_id());
}
mAdapter.addAll(data);
// call the "TrailerLinkLoader" to get trailers Links for Retrieved movies
loaderManager.initLoader(Trailer_Link_LOADER_ID, null, Trailer_loaderCallbacks);
}
}
@Override
public void onLoaderReset(android.support.v4.content.Loader<List<Movie>> loader) {
mAdapter.clear();
movies_IDs_list.clear();
trailers_List.clear();
}
};
Fragment_2 Code and other Fragments Code : is similar to Fragment_1 Code as they all doing a network request to retrieve data of Different given Urls