在ViewPager中重新加载片段,然后在ViewPager中的另一个片段中



我有一个活动,其中包括带有三个片段的ViewPager。在第二个片段中,我也有带有两个不同片段的ViewPager。 这是我的MainActivityPagerAdapter,它与MainActivity中的ViewPager连接:

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;
}
}

这是我在第二个片段中用于查看寻呼机的寻呼机适配器:

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() for MainActivityViewPager,它工作正常,但第二个片段中的片段不会更新(onCreateView 不调用,我只看到空视图)。 在什么可能是问题?

将 getChildFragmentManager() 用于内部视图Pager

使用getChildFragmentManager()而不是getFragmentManager()视图Pager中更改片段

最新更新