Android 如何强制ViewPager重新创建其片段?

Android 如何强制ViewPager重新创建其片段?,android,android-layout,android-fragments,android-viewpager,Android,Android Layout,Android Fragments,Android Viewpager,场景: 我有一个带有ViewPager的片段,它有一个提供3个片段的FragmentPagerAdapter 因此,我的应用程序第一次加载时,3个选项卡片段看起来很好 在应用程序中导航时,我执行FragmentManager.replace加载另一个片段 当我返回或导航到主视图时,选项卡式视图我的第一个和第二个选项卡为空 我调试了应用程序,Fragment.onDestroyView在选项卡片段上从未被调用,因此当它再次显示时,Fragment.onCreateView从未被调用,因此我的视图为

场景:

我有一个带有ViewPager的片段,它有一个提供3个片段的FragmentPagerAdapter

因此,我的应用程序第一次加载时,3个选项卡片段看起来很好

在应用程序中导航时,我执行FragmentManager.replace加载另一个片段

当我返回或导航到主视图时,选项卡式视图我的第一个和第二个选项卡为空

我调试了应用程序,Fragment.onDestroyView在选项卡片段上从未被调用,因此当它再次显示时,Fragment.onCreateView从未被调用,因此我的视图为空

如果我导航到选项卡式片段中的第三个选项卡,那么Fragment.onDestroy会被我假设的PageAdapter调用,因为ViewPager上的1 offLimit

因此,我的问题是,一旦在我的活动中加载了另一个片段,然后我返回或导航到选项卡式视图,我如何强制重新创建ViewPager、PageAdapter,甚至片段本身

到目前为止,我尝试使用选项卡视图执行FragmentManager.removefragment,而不进行任何查看,而且,每次导航到选项卡视图时,我都会将一个新实例传递给FragmentManager.replace方法,似乎每次他都从FragmentManager中提取相同的对象

选项卡视图片段:

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    view = inflater.inflate(R.layout.tab_view, container, false);
    viewPager = (ViewPager) view.findViewById(R.id.view_iam);
    final PagerAdapter pagerAdapter = new MyFragmentAdapter(getActivity().getSupportFragmentManager());
    viewPager.setAdapter(pagerAdapter);
    return view;
}
页面适配器:

private static class MyFragmentAdapter extends FragmentPagerAdapter {
    private Fragment[] tabs;
    private String[] names;

    public MyFragmentAdapter(FragmentManager fm) {
        super(fm);
        tabs = new Fragment[]{new FlightsView(), new MyFlightsRequestView(),
                new MyFlightsView()};
        names = new String[]{"VUELOS", "SOLICITUDES", "MIS VUELOS"};
    }

    @Override
    public Fragment getItem(int position) {
        return tabs[position];
    }

    @Override
    public int getCount() {
        return tabs.length;
    }

    @Override
    public String getPageTitle(int position) {
        return names[position];
    }

}
Flights查看其中一个选项卡碎片

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.view_flight, container, false);
    recycle_view = (RecyclerView) view.findViewById(R.id.recycler_view);
    progressBar = (ProgressBar) view.findViewById(R.id.progress_bar);

    setHasOptionsMenu(true);
    return view;
}

能否请您尝试从FragmentStatePagerAdapter而不是FragmentPagerAdapter扩展适配器

能否请您尝试从FragmentStatePagerAdapter而不是FragmentPagerAdapter扩展适配器

运气不好,是相同的行为还是使用getChildFragmentManager而不是GetSupportFragmentManager,然后你可以把它标记为一个答案,这样其他人就可以找到解决方案我该怎么做,我看到的唯一选项,是一个报告滥用的标志或类似的东西,并且一个箭头已经点击了它向下箭头下必须有一个勾号按钮。如果你按下它,这意味着它解决了你的问题。运气不好,是相同的行为吗使用getChildFragmentManager而不是GetSupportFragmentManager怎么样?如果它有效,那么你可以将它标记为答案,这样其他人就可以找到解决方案。我怎么做,我看到的唯一选项是标记报告滥用或类似情况,一个箭头已经点击了,向下箭头下必须有一个勾号按钮。如果你按它,那意味着它已经解决了你的问题。