Android View Pager Adapter показывает пустой экран

Я реализую адаптер пейджера в 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);        

Ответ 1

Используйте это,

public class MyPagerAdapter extends android.support.v4.app.FragmentStatePagerAdapter

Ответ 2

Просто проверьте, используете ли вы getFragmentManager() для инициализации адаптера, попробуйте использовать getChildFragmentManager() следующим образом:

   mAdapter = new MyPagerAdapter(getChildFragmentManager());
        viewPager.setAdapter(mAdapter);

Ответ 3

Потому что вам не разрешено иметь вложенные фрагменты.

Фрагменты внутри фрагментов

Измените класс на extends FragmentActivity и он должен работать

Ответ 4

My ViewPager находится в фрагменте. Я решаю эту проблему, изменяя FragmentPagerAdapter на FragmentStatePagerAdapter, а также использую getFragmentManager(). он отлично работает;

Ответ 5

У меня была та же проблема и я потратил на это целый день. Поэтому я публикую решение для моей проблемы, чтобы кому-то другому не пришлось бороться и тратить много времени.

Моя проблема заключалась в том, что фрагменты внутри viewpager вызывались (отладчик получал удар), но я не смог увидеть его в представлении (даже в первый раз).

Проблемы были:

  1. Родителем ViewPager был фрагмент.

Мне пришлось использовать getChildFragmentManager() вместо getFragmentManager().

  1. Родителем родительского фрагмента был NestedScrollView(действие, в котором был заполнен фрагмент).

По какой-то причине, даже если мы сохраним высоту и ширину viewpager как matchparent, он не поднимался и по умолчанию был равен 0 (даже если он был заполнен в предварительном просмотре xml). Чтобы это исправить, мы должны добавить android:fillViewport="true" в ваш NestedScrollView

Надеюсь, кто-то найдет это полезным :)

Ответ 6

используйте FragmentStatePagerAdapter вместо FragmentPagerAdapter

и добавьте эту строку после установки адаптера

viewPager.setOffscreenPageLimit(6);\\ add the number of fragments you have

Это запомнит фрагменты в памяти и никогда не покажет пустой экран. Но имейте в виду, что при этом данные каждой страницы будут храниться в памяти, поэтому используйте их соответствующим образом.