У меня есть Fragment
MyFragment vith a ViewPager
, содержащий больше Fragment
. Он работает правильно при первом загрузке MyFragment, но если я вернусь и заново создаю его, то Fragments
в ViewPager
не будут показаны, потому что метод FragmentPagerAdapter.getItem
не вызывается.Фрагменты в ViewPager не загружаются при восстановлении содержащего фрагмента
Я использую
Что случилось?
import android.app.Fragment;
import android.app.FragmentManager;
import android.support.v13.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
...
public class MyFragment extends Fragment {
private ViewPager pager;
private MyPagerAdapter adapter;
private List<Fragment> fragmentList = new ArrayList<Fragment>();
public MyFragment() {}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.my_fragment_layout, container, false);
}
public void onViewCreated(View v, Bundle savedInstanceState) {
super.onViewCreated(v, savedInstanceState);
indicators = (PagerSlidingIndicator) v.findViewById(R.id.indicators);
pager = (ViewPager) v.findViewById(R.id.pager);
Fragment fragment1 = new Fragment1();
fragmentList.add(fragment1);
Fragment fragment2 = new Fragment2();
fragmentList.add(fragment2);
Fragment fragment3 = new Fragment3();
fragmentList.add(fragment3);
adapter = new IndicatorPagerAdapter(getFragmentManager());
pager.setAdapter(adapter);
}
public class MyPagerAdapter extends FragmentPagerAdapter {
public MyPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public int getCount() {
return fragmentList.size();
}
@Override
public Fragment getItem(int position) {
return fragmentList.get(position);
}
}
}
getChildFragmentManager(): для вызова требуется уровень API 17, и у меня есть min = 15. Таким образом, единственный способ использовать поддержку «Фрагмент», правильно? – jul
Да, печальная правда заключается в том, что мне пришлось заменить все мои фрагменты поддержкой Фрагмента, чтобы иметь возможность использовать getChildFragmentManager() – jul
@jul: Да, понятие вложенных фрагментов было добавлено только к нативной реализации фрагментов в API Level 17 Ваши альтернативы были бы либо не иметь «ViewPager» в фрагменте, либо не иметь фрагментов в качестве страниц «ViewPager». – CommonsWare