[英]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
,其中包含一个viewpager
而viewpager
由不同的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.