我在一个带有2个片段的Fragment(片段A)中有一个viewpager。假设名称为Fragment B和FragmentC。在Fragment B中,用户有不同的选项。一旦用户选择了任何选项,它就会启动一个新的片段,我们可以将其命名为FragmentD。在此阶段,一切运行良好。从片段D返回到包含viewpager的片段时,它不会加载片段B或片段C。我尝试了多种解决方案,但没有任何效果。当我可以调用以下行时,一种解决方案似乎正在起作用:
viewPager = new ViewPager(getChildFragmentManager())
但是问题在于页面加载后立即再次启动FragmentD。只要用户按下“后退”按钮,它就可以像这样继续工作。
以下是我使用的代码:
片段A:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_calendar_main, container, false);
initViews(view);
return view;
}
private void initViews(View view) {
TabLayout tabLayout = view.findViewById(R.id.tabLayout);
final ViewPager viewPager = view.findViewById(R.id.viewPager);
TabAdapter adapter = new TabAdapter(getFragmentManager());
adapter.addFragment(new CreateAppointmentTabFragment(), "Create Appointment");
adapter.addFragment(new ShowCalendarTabFragment(), "Calendar");
viewPager.setAdapter(adapter);
tabLayout.setupWithViewPager(viewPager);
}
适配器:
public class TabAdapter extends FragmentStatePagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
public TabAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
public void addFragment(Fragment fragment, String title) {
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}
}