方案:
我有一个ViewPager
的片段,它有一个FragmentPagerAdapter
,可以提供3个片段。
因此,第一次加载应用程序时,3个选项卡片段看起来很好。
当我在应用程序中导航时,我会FragmentManager.replace
加载另一个片段。
当我返回或导航到主视图(标签视图)时,我的第一个和第二个标签是空白的。
我调试了应用程序,Fragment.onDestroyView
永远不会调用Tab片段,所以当它再次显示时,Fragment.onCreateView
永远不会再被调用,所以我的视图是空白的。
如果我导航到选项卡式片段中的第三个选项卡,则Fragment.onDestroy
会调用PageAdapter
(因为ViewPager上有1个offLimit,我认为是这样)
所以,我的问题是,一旦我的活动中加载了另一个片段,然后我返回,或导航到选项卡视图,我该如何强制ViewPager
或PageAdapter
,甚至片段本身都要重新创建。
到目前为止,我尝试用TabView做FragmentManager.remove(fragment)
而没有任何外观,每次,我导航到选项卡视图我将新实例传递给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;
}
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];
}
}
FlightsView(其中一个标签碎片)
@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;
}
答案 0 :(得分:6)
您可以尝试从 FragmentStatePagerAdapter 而不是 FragmentPagerAdapter
扩展您的适配器