Android - сохранение состояния Viewpager внутри фрагмента

У меня есть фрагмент контейнера Acadmey который содержит viewpager а также viewpager состоят из разных child fragments, В дочерних фрагментах View pager я вызываю запрос json для получения данных, которые нужно заполнить. В первый раз все работает нормально, но когда я вернусь к main activity и снова вернемся к пейджеру просмотра всего содержимого child fragment стирается и onActivityCreated звонки только в первый раз, поэтому мои страницы просмотра остаются пустыми каждую секунду или n раз, когда я открывал. Как я могу сохранить содержимое дочернего фрагмента для повторного использования или любой другой метод, который будет callbacked каждый раз, когда открывается каждый дочерний фрагмент viewpager.

Фрагмент моего контейнера:-

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

}

}

Детский фрагмент моего видового экрана (курсы)

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

* Мой адаптер ViewPager *

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

1 ответ

При использовании ViewPager внутри Fragment, you need to use getChildFragmentManager() вместо getSupportFragmentManager(), The fragments in the pager are children of the container fragment, not of the parent context.

Другие вопросы по тегам