【问题标题】:Navigation drawer + ViewPager - fragments do not show导航抽屉 + ViewPager - 片段不显示
【发布时间】:2015-04-25 20:15:30
【问题描述】:

我创建的布局有问题。我使用导航抽屉作为主要的导航模式。它看起来和我想要的那样工作,但问题是在返回到包含ViewPager 的片段后 - 内部片段没有显示。但是,它们会在首次打开应用程序时显示,并且默认显示 ViewPager-holding Fragment

其他导航抽屉Fragments显示正常,所以我不希望我的导航抽屉实现有任何问题

RecordFragment.java(片段持有ViewPagerFragments):

public class RecordFragment extends Fragment {
    private ViewPager mViewPager;

    public RecordFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.record_fragment, container, false);
        //getActivity().setTitle(R.string.record);
        return rootView;
    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        mViewPager = (ViewPager) view.findViewById(R.id.record_pager);
        FragmentManager manager = getFragmentManager();
        mViewPager.setAdapter(new MyFragmentPagerAdapter(manager));
    }

    class MyFragmentPagerAdapter extends FragmentPagerAdapter {

        public MyFragmentPagerAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int item) {
            Fragment fragment = null;
            if (item == 0) {

                fragment = new NumbersFragment();
            } else if (item == 1) {

                fragment = new MapFragment();
            }
            return fragment;
        }

        @Override
        public int getCount() {
            return 2;
        }

        @Override
        public CharSequence getPageTitle(int position) {
            String title = new String();
            if (position == 0) {
                title = "Numbers";
            } else if (position == 1) {
                title = "Map";
            }
            return title;
        }

    }
}

NumbersFragment.java(RecordFragment 持有的Fragments 之一)

public class NumbersFragment extends Fragment {
    public NumbersFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.numbers_fragment, container, false);
        //getActivity().setTitle(R.string.record);
        return rootView;
    }
}

record_fragment.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <android.support.v4.view.ViewPager
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/record_pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <android.support.v4.view.PagerTabStrip
            android:id="@+id/pager_title_strip"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="top"
            android:background="#33b5e5"
            android:textColor="#fff"
            android:paddingTop="4dp"
            android:paddingBottom="4dp" />
    </android.support.v4.view.ViewPager>

</LinearLayout>

【问题讨论】:

    标签: android android-fragments android-viewpager android-navigation


    【解决方案1】:

    你在另一个Fragment中使用Fragments,在这种情况下你需要使用Fragment#getChildFragmentManager()方法:

    FragmentManager manager = getChildFragmentManager();
    

    如果不起作用,您可以尝试切换到FragmentStatePagerAdapter 而不是FragmentPagerAdapter(但您仍然需要使用子片段管理器)。

    【讨论】:

    • 如果可以的话,+100 票。这使我免于另一个问题,即我的片段没有显示在水平视图分页器内嵌套的 VerticalViewPager。这行代码拯救了我的工作冲刺!
    【解决方案2】:

    由于 ViewPager 需要 Fragments 并且 ViewPager 本身在 Fragment 上,所以我们必须使用 getChildFragmentManager() 而不是 getSupportFragmentManager()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-14
      • 1970-01-01
      相关资源
      最近更新 更多