Перезагрузить фрагменты внутри 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