简体   繁体   中英

Android - Saving state of Viewpager inside a fragment

I have a container fragment Acadmey which is containing a viewpager and viewpager consist of different child fragments . In the child fragments of View pager I invoke the json request to get the data to be populated. For the first time every thing works fine but when I get back to main activity and again get backs to the view pager all the content of the child fragment is wiped out and onActivityCreated calls only of the first time therefore my viewpagers pages are blank for every second or n times I opened . How can I save the content of the child fragment for reuse or is their any method which will defentaly been callbacked every time when viewpager's every child fragment reopens.

My Container Fragment :-

  public class Academy extends Fragment {
  ViewPager viewPager = null;
  TabLayout tabLayout;
  MyViewPagerAdapter adapter;
  private String myString = "hello";

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


}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    Log.d("xx", "view started .............. papa");
    return inflater.inflate(R.layout.academy, container, false);
}

@Override
public void onActivityCreated( Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    tabLayout = (TabLayout) getActivity().findViewById(R.id.tablayoutacademy);
    viewPager = (ViewPager) getActivity().findViewById(R.id.academypager);
    adapter = new MyViewPagerAdapter(getActivity().getSupportFragmentManager());
    adapter.addfragment(new FragmentCourse(), "COURSES");
    adapter.addfragment(new FragmentEducator(), "EDUCATORS");
    viewPager.setAdapter(adapter);
    tabLayout.setupWithViewPager(viewPager);

}

}

My Viewpager Child Fragment(Courses)

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


}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    Log.d("xx", "view course started...........................");
    progress=new ProgressDialog(getContext());
    progress.setMessage("Nukeing..");
    progress.show();
    return inflater.inflate(R.layout.fragmentcourse, container, false);

}

@Override
public void onActivityCreated(Bundle jhoola2) {
    super.onActivityCreated(jhoola2);
          Log.d("xx", "acti  cource started");
    recyclerView = (RecyclerView) getActivity().findViewById(R.id.rv2);
    manager = new LinearLayoutManager(getActivity());
    recyclerView.setLayoutManager(manager);
    recyclerView.setHasFixedSize(true);
    Handler handler = new Handler() {


        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            MyImageCompress ic=new MyImageCompress();

            Bundle bundle=new Bundle();
            bundle=msg.getData();

            title1 = bundle.getStringArrayList("C_name");
            dec1=bundle.getStringArrayList("Discription");
            image1=bundle.getStringArrayList("Image");
            for (int i = 0; i < image1.size(); i++) {

                imageArray1.add(ic.StringToBitMap(image1.get(i)));
                Log.d( "handleMessage: "," Final parse" +i);
            }
            Log.d("handleMessage: EDU ", title1.size() + "" + dec1.size() + imageArray1.size());
                                adapter = new RecyclerAdaptra(title1, dec1, imageArray1);
            progress.hide();

            recyclerView.setAdapter(adapter);
            adapter.notifyDataSetChanged();

        }
    };
   GetCources gc= new GetCources(url,handler);
    gc.executeRequest();
    }
}

*My ViewPager Adapter *

class MyViewPagerAdapter extends FragmentPagerAdapter {
ArrayList<Fragment> fragments = new ArrayList<Fragment>();
ArrayList<String> tabtitles = new ArrayList<String>();

public void addfragment(Fragment fragments, String titles) {
    this.fragments.add(fragments);
    this.tabtitles.add(titles);
}

public MyViewPagerAdapter(FragmentManager fm) {
    super(fm);
}

@Override
public Fragment getItem(int i) {
    return fragments.get(i);

}

@Override
public int getCount() {
    return fragments.size();
}

@Override
public CharSequence getPageTitle(int position) {
    return tabtitles.get(position);
}
}

When using a ViewPager inside of a Fragment , you need to use getChildFragmentManager() instead of getSupportFragmentManager() . The fragments in the pager are children of the container fragment, not of the parent context.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM