简体   繁体   English

Android-在片段内保存Viewpager的状态

[英]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 . 我有一个容器片段Acadmey ,其中包含一个viewpagerviewpager由不同的child fragments In the child fragments of View pager I invoke the json request to get the data to be populated. 在View分页器的子片段中,我调用json请求以获取要填充的数据。 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 . 第一次一切正常,但是当我回到main activity并再次回到视图分页器时,所有child fragment的内容将被清除,并且仅在第一次调用onActivityCreated时,因此我的viewpagers页对于每个页面都是空白我第二次或n次打开。 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. 我该如何保存子片段的内容以供重用,或者它们是在每次重新打开viewpager的每个子片段时都会被callbacked的任何方法。

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

*My ViewPager Adapter * *我的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);
}
}

When using a ViewPager inside of a Fragment , you need to use getChildFragmentManager() instead of getSupportFragmentManager() . Fragment内使用ViewPager ,需要使用getChildFragmentManager()而不是getSupportFragmentManager() The fragments in the pager are children of the container fragment, not of the parent context. 分页器中的片段是容器片段的子代,而不是父上下文的子代。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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