ViewPage Fragment disappear when reload again

try using this:

in the constructor of your adapter change this :

public class MyPagerAdapter extends FragmentPagerAdapter {
private ArrayList<Fragment> _fragments;

public MyPagerAdapter(FragmentManager activity) {
    super(activity);

    this._fragments = new ArrayList<Fragment>();
}

public void add(Fragment fragment) {
    this._fragments.add(fragment);
}

@Override
public Fragment getItem(int position) {
    return this._fragments.get(position);
}

@Override
public CharSequence getPageTitle(int position) {
    return "Test";
}

@Override
public int getCount() {
    return 1;
}


}

and when you want to create the adapter send getChildFragmentManager() to its constructor

public class HomeFragment extends Fragment {
private MyPagerAdapter _adapter;

public HomeFragment() {
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.common_view_pager_layout, container, false);
    ViewPager pager = (ViewPager) view.findViewById(R.id.MainViewerPage);

    this._adapter = new MyPagerAdapter(getChildFragmentManager());
    this._adapter.add(new DetailFragment());


    pager.setAdapter(this._adapter);


    return view;
}
}

I test it and it works, any problem comment it.

Good Luck!


In your Fragment class, in the onCreate() method, you have to call setRetainInstance(true) like this:

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);     
    setRetainInstance(true);
}

This tells the FragmentManager to keep your fragments on reloads. In addition, check your manifest file doesn't have any

android:screenOrientation

config changes where you are basically saying you will handle reloads due to config changes yourself.


In PagerFragment 's onResume() add this:

@Override
public void onResume() {
    super.onResume();

    for (Fragment fragment : getFragmentManager().getFragments()) {
        if (fragment instanceof Tab1Fragment || fragment instanceof Tab2Fragment) {
            FragmentTransaction ft = getFragmentManager().beginTransaction();
            ft.detach(fragment);
            ft.attach(fragment);
            ft.commit();
        }
    }
}

Tags:

Android