android - 我如何强制 ViewPager 重新创建它们的 fragment ?

标签 android android-layout android-fragments android-viewpager

场景:

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

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

当我在应用程序中导航时,我会执行 FragmentManager.replace 来加载另一个 fragment 。

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

我调试了应用程序,Fragment.onDestroyView 永远不会调用 Tab fragment ,所以当它再次显示时,Fragment.onCreateView 再也不会被调用,所以我的观点是空白。

如果我导航到选项卡式 fragment 中的第三个选项卡,则 Fragment.onDestroy 会被 PageAdapter 调用(我想是因为 ViewPager 上的 1 offLimit )

所以,我的问题是,一旦另一个 fragment 加载到我的 Activity 中,然后我返回或导航到选项卡式 View ,我如何强制 ViewPager PageAdapter,甚至要重新创建的 Fragment 本身。

到目前为止,我尝试在没有任何外观的情况下使用 TabView 执行 FragmentManager.remove(fragment),而且,每次,我导航到选项卡式 View ,我将一个新实例传递给 FragmentManager.replace方法,好像每次他从FragmentManager中拉取同一个对象。

TabView( fragment ):

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

}

FlightsView(标签 fragment 之一)

@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 扩展您的适配器?

关于android - 我如何强制 ViewPager 重新创建它们的 fragment ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41958265/

相关文章:

android - 共享 jenkins 库 build.gradle 错误

java - 如何在不使用循环器和处理程序的情况下在特定线程中调度任务?

内存不足时Android应用程序强制关闭

android - drawable 中的 xml 文件,可用于所有分辨率

android - 以编程方式返回到上一个 fragment

我的应用程序的 Java 构造函数

android - 如何为应用程序的 TalkBack 设置不同的标签?

android - 在继承于RelativeLayout的类中调用此方法时,findViewById返回null

android - Glide-4.0.0 缺少占位符,错误,GlideApp 并且不解析其方法占位符,错误

android - 在BottomSheetDialogFragment 中以编程方式设置查看高度