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

ala*_*ret 1 android android-layout android-fragments android-viewpager

场景:

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

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

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

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

我调试了应用程序,并且Fragment.onDestroyView永远不会调用Tab片段,所以当它再次显示时,Fragment.onCreateView永远不会再次调用,所以我的视图是空白的.

如果我导航到选项卡片段中的第三个选项卡,Fragment.onDestroy则由PageAdapter(我认为因为ViewPager上的1 offLimit)调用

所以,我的问题是,一旦另一个片段被装载在我的活动,然后我回去,或浏览选项卡式浏览,我怎么能强迫ViewPager,或者PageAdapter,甚至片段本身重新创建.

到目前为止,我尝试FragmentManager.remove(fragment)用TabView 做一个没有任何外观,也是,每次,我导航到选项卡视图我传递一个新的实例到FragmentManager.replace方法,似乎每次,他从中拉出相同的对象FragmentManager.

TabView(片段):

@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;
}
Run Code Online (Sandbox Code Playgroud)

PageAdapter:

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

}
Run Code Online (Sandbox Code Playgroud)

FlightsView(Tab片段之一)

@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;
}
Run Code Online (Sandbox Code Playgroud)

小智 7

你可以尝试从FragmentStatePagerAdapter而不是FragmentPagerAdapter扩展你的适配器