繁体   English   中英

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

[英]Android - Saving state of Viewpager inside a fragment

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

我的容器片段:-

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

}

}

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

Fragment内使用ViewPager ,需要使用getChildFragmentManager()而不是getSupportFragmentManager() 分页器中的片段是容器片段的子代,而不是父上下文的子代。

暂无
暂无

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

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