java - 从另一个 fragment 导航后返回时 ViewPager 不可见

标签 java android android-fragments android-viewpager

我默认使用 3 个选项卡(FragmentOne、FragmentTwo 和 FragmentThree)创建经典的底部导航。 第一个 fragment (FragmentOne) 具有 ViewPager 和两个静态内部 fragment (FragmentInner1 和 FragmentInner2)。

当应用程序启动时,一切都很好,因此在 FragmentOne 处,我们可以看到 FragmentInner1 并可以导航到 FragmentInner2

但是从 FragmentTwo 导航到 FragmentOne FragmentInner1 不可见。 这是一个问题。

我想我们应该以某种方式重新创建它? 我从这里调查了手册https://developer.android.com/guide/components/fragments.htmlhttps://developer.android.com/training/implementing-navigation/lateral.html#PagerTitleStrip但这没有帮助,我的代码看起来是一样的。

请帮忙。谢谢!

FragmentOne

public class FragmentOne extends Fragment {

    //This is our viewPager
    private ViewPager viewPager;

    //Fragments
    FragmentInner1 fragmentInner1;
    FragmentInner2 fragmentInner2;

    ViewPagerAdapter adapter;

    private View view;

    public FragmentOne() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,  Bundle savedInstanceState) {

         view = inflater.inflate(R.layout.fragment_fragment_one, container, false);

        //Initializing viewPager
        viewPager = (ViewPager) view.findViewById(R.id.viewpager);

        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {

            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });

        setupViewPager(viewPager);

        return view;
    }

    private void setupViewPager(ViewPager viewPager) {
        adapter  = new ViewPagerAdapter(getActivity().getSupportFragmentManager());
        fragmentInner1=new FragmentInner1();
        fragmentInner2=new FragmentInner2();
        adapter.addFragment(fragmentInner1);
        adapter.addFragment(fragmentInner2);
        viewPager.setAdapter(adapter);
    }

    @Override
    public void onAttach(Context context)
    {
        super.onAttach(context);
    }

    @Override
    public void onResume() {
        super.onResume();

    }

    @Override
    public void onPause() {
        super.onPause();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
    }
}

ViewPagerAdapter

public class ViewPagerAdapter extends FragmentPagerAdapter {
    private final List<Fragment> mFragmentList = new ArrayList<>();

    public ViewPagerAdapter(FragmentManager manager) {
        super(manager);
    }
    @Override
    public Fragment getItem(int position) {
        Fragment fragment = mFragmentList.get(position);
        return fragment;
    }

    @Override
    public int getCount() {
        return mFragmentList.size();
    }

    public void addFragment(Fragment fragment) {
        mFragmentList.add(fragment);
    }
}

FragmentInner1

public class FragmentInner1 extends Fragment {

    public static FragmentInner1 newInstance( ) {
        FragmentInner1 fragment = new FragmentInner1();
        return fragment;
    }

    public FragmentInner1() {
    }    

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {     
        return inflater.inflate(R.layout.fragment_fragment_inner1, container, false);
    }

}

enter image description here

最佳答案

您必须使用getChildFragmentManager()Viewpager适应Popback功能。

adapter  = new ViewPagerAdapter(getChildFragmentManager());

这是因为 Viewpager 有多个 Fragment,其中 Viewpager 本身或由另一个 Fragment 持有。因此子 fragment 将被调用和使用。

You Can Refer this Documentation on ChildFragmentManager()

关于java - 从另一个 fragment 导航后返回时 ViewPager 不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48016786/

相关文章:

java - 捕获音量增大和减小按钮按下并且不返回任何内容

java - 从 fragment 类调用 Activity 的函数给出 NPE

android - java.lang.RuntimeException : Failure delivering result ResultInfo{who=null, 请求=65537

android - 带有 FragmentPagerAdapter 的 ViewPager 不显示

java - 有人知道使用Xcode的在线Java教程吗?

java - JPA + EclipseLink - 使用封闭的 EntityManager 进行延迟加载

java - 将PlatformTransactionManager注入(inject)Ehcache

java - 无效输入请求的 REST 服务异常

Android Studio+实验性Gradle插件+NDK+OpenCV :showing error at opencv include statement

Android 文件选择器将音频文件重定向到/外部