Ответ 1
Используйте это,
public class MyPagerAdapter extends android.support.v4.app.FragmentStatePagerAdapter
Я реализую адаптер пейджера в Fragment
. Когда я загружаю экран в первый раз, он работает нормально. Если я переключаюсь на другой фрагмент и снова иду к предыдущему фрагменту, он показывает пустой экран. Если я проведу пальцем между различными касаниями и снова перейду на первую вкладку, тогда будут показаны данные.
Я думаю, что при перемещении назад видимых вкладок не загружаются данные, но как только они оказываются вне поля зрения во время пролистывания, они загружают данные.
Вот мой пейджинговый адаптер:
public class MyPagerAdapter extends FragmentPagerAdapter {
public MyPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int index) {
switch (index) {
case 0:
return new Fragment1();
case 1:
return new Fragment2();
case 2:
return new Fragment3();
case 3:
return new Fragment4();
case 4:
return new Fragment5();
case 5:
return new Fragment6();
}
return null;
}
@Override
public int getCount() {
return 6;
}
}
Я настраиваю свой адаптер следующим образом:
viewPager = (ViewPager) rootView.findViewById(R.id.my_pager);
mAdapter = new MyPagerAdapter(getActivity().getSupportFragmentManager());
viewPager.setAdapter(mAdapter);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
Используйте это,
public class MyPagerAdapter extends android.support.v4.app.FragmentStatePagerAdapter
Просто проверьте, используете ли вы getFragmentManager()
для инициализации адаптера, попробуйте использовать getChildFragmentManager()
следующим образом:
mAdapter = new MyPagerAdapter(getChildFragmentManager());
viewPager.setAdapter(mAdapter);
Потому что вам не разрешено иметь вложенные фрагменты.
Измените класс на extends FragmentActivity
и он должен работать
My ViewPager находится в фрагменте. Я решаю эту проблему, изменяя FragmentPagerAdapter на FragmentStatePagerAdapter, а также использую getFragmentManager(). он отлично работает;
У меня была та же проблема и я потратил на это целый день. Поэтому я публикую решение для моей проблемы, чтобы кому-то другому не пришлось бороться и тратить много времени.
Моя проблема заключалась в том, что фрагменты внутри viewpager
вызывались (отладчик получал удар), но я не смог увидеть его в представлении (даже в первый раз).
Проблемы были:
Мне пришлось использовать getChildFragmentManager()
вместо getFragmentManager()
.
По какой-то причине, даже если мы сохраним высоту и ширину viewpager
как matchparent
, он не поднимался и по умолчанию был равен 0 (даже если он был заполнен в предварительном просмотре xml).
Чтобы это исправить, мы должны добавить android:fillViewport="true"
в ваш NestedScrollView
Надеюсь, кто-то найдет это полезным :)
используйте FragmentStatePagerAdapter
вместо FragmentPagerAdapter
и добавьте эту строку после установки адаптера
viewPager.setOffscreenPageLimit(6);\\ add the number of fragments you have
Это запомнит фрагменты в памяти и никогда не покажет пустой экран. Но имейте в виду, что при этом данные каждой страницы будут храниться в памяти, поэтому используйте их соответствующим образом.