Перезагрузить фрагменты внутри ViewPager, который внутри другого фрагмента в ViewPager

У меня есть активность, которая включает в себя ViewPager с тремя фрагментами. Во втором фрагменте у меня тоже ViewPager с двумя разными фрагментами. Это мой MainActivityPagerAdapter, который связан с ViewPager в MainActivity:

public class MainActivityPagerAdapter extends FragmentStatePagerAdapter implements LoginView.LoginStateChangeListener {

    private static final String TAG = MainActivityPagerAdapter.class.getName();

    private MapFragment mapFragment = new MapFragment();
    private UserProfileFragment userProfileFragment = new UserProfileFragment();
    private CompanyProfileFragment CompanyProfileFragment = new DiveCenterProfileFragment();
    private NotificationsFragment notificationsFragment = new notificationsFragment();

    public MainActivityPagerAdapter(FragmentManager manager) {
        super(manager);

    }

    @Override
    public Fragment getItem(int position) {
        switch (position) {
            case 0:
                return mapFragment;
            case 1:
                return notificationsFragment;
            case 2:
                switch (MyApplication.getInstance().getSharedPreferenceHelper().getActiveUserType()) {
                    case DIVECENTER:
                        return companyProfileFragment;
                    case DIVER:
                    case INSTRUCTOR:
                        return userProfileFragment;
                    case NONE:
                        return userProfileFragment;
                }
            default:
                return null;
        }
    }

    @Override
    public int getCount() {
        return 3;
    }

    @Override
    public int getItemPosition(Object object) {
        Log.i(TAG, "getItemPosition");
        return POSITION_NONE;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return null;
    }
}

Это мой пейджинговый адаптер для ViewPager на втором фрагменте:

public class NotificationsPagerAdapter extends FragmentStatePagerAdapter {

    private PersonalNotificationsFragment personalNotificationsFragment = new PersonalNotificationsFragment();
    private ActivityNotificationsFragment activityNotificationsFragment = new ActivityNotificationsFragment();

    public NotificationsPagerAdapter(FragmentManager manager) {
        super(manager);
    }

    @Override
    public Fragment getItem(int position) {
        switch (position) {
            case 0:
                return personalNotificationsFragment;
            case 1:
                return activityNotificationsFragment;
            default:
                return null;
        }
    }

    @Override
    public int getCount() {
        return 2;
    }

    public void setPersonalNotificationsFragment(PersonalNotificationsFragment personalNotificationsFragment) {
        this.personalNotificationsFragment = personalNotificationsFragment;
    }

    public void setActivityNotificationsFragment(ActivityNotificationsFragment activityNotificationsFragment) {
        this.activityNotificationsFragment = activityNotificationsFragment;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return null;
    }

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

Итак, в приложении есть два пользовательских типа:

  • Простой пользователь
  • Компания

Когда пользователь меняет свой тип, мне нужно обновить все фрагменты в MainActivity, включая фрагменты внутри второго фрагмента. Для этого я использую notifyDataSetChanged() для MainActivityViewPager, он работает правильно, но фрагменты внутри второго фрагмента не обновляются (onCreateView не вызывается, и я вижу только пустые представления). В чем может быть проблема?

2 ответа

Решение

Используйте getChildFragmentManager() для внутреннего viewPager

Использование getChildFragmentManager() вместо getFragmentManager() для изменения фрагментов внутри viewPager

Другие вопросы по тегам