Подтвердить что ты не робот

ViewPager в TabFragment не загружается второй раз

Я пытаюсь создать приложение, имеющее ViewPager в фрагменте, который является частью TabHost.

Все работает отлично. У меня есть табуляция, я могу переключить вкладки. Когда я переключаюсь на вкладку с помощью ViewPager, все отображается правильно. Но как только я покину эту вкладку с помощью ViewPager и верну эту вкладку, мой контент не будет показан. Если я дважды перейду в сторону, я увижу следующее изображение. И если я вернусь два раза, я также увижу, что изображения загружены (возможно, внеэкранный). Посмотрите, что мой TabFragment восстанавливается, когда я возвращаюсь к нему, но фрагменты в ViewPager не являются.

Я включил макет экрана и некоторые из моего кода.

Помогает ли кто-нибудь?

Ура!

@Override
public void onActivityCreated(Bundle savedInstanceState) {

    mProjectText = (TextView) getView().findViewById(R.id.projectText);
    mProjectText.setText(mActiveProject.getInspirationText());

    mAdapter = new AlbumAdapter(getFragmentManager(), mActiveProject.getInspiration());

    mPager = (ViewPager)getView().findViewById(R.id.pager);
    mPager.setAdapter(mAdapter);


    super.onActivityCreated(savedInstanceState);
}




public class AlbumAdapter extends FragmentStatePagerAdapter {

private ArrayList<ProjectContent> mItems;

public AlbumAdapter(FragmentManager fm, ArrayList<ProjectContent> items) {
    super(fm);
    this.mItems = items;
}

@Override
public Fragment getItem(int position) {
    return AlbumContentFragment.newInstance(mItems.get(position));
}

@Override
public int getCount() {
    return mItems.size();
}

@Override
public int getItemPosition(Object object) {
    return POSITION_NONE;
}}

The mockup for the app

4b9b3361

Ответ 1

Я нашел проблему. Это заняло у меня два дня, но эй, это исправлено.

Вместо использования

mAdapter = new AlbumAdapter(getFragmentManager(), mActiveProject.getInspiration());

Вы должны использовать

mAdapter = new AlbumAdapter(getChildFragmentManager(), mActiveProject.getInspiration());

Так много для 5 символов.

Ответ 2

Я искал  это надолго, наконец, нашли решение. Измените экземпляр адаптера страницы FragmentPagerAdapter на FragmentStatePagerAdapter Пример:

class PageAdapter extends FragmentStatePagerAdapter {

Ответ 3

Вы должны использовать getChildFragmentManager() вместо getFragmentManager() и FragmentStatePagerAdapter() вместо FragmentPagerAdapter() Надеюсь, это будет кому-то полезно.