已创建但未在 Android <= Jelly Bean 上显示的 ViewPager 片段

ViewPager fragments created but not beeing displayed on Android <= Jellybean

我有以下布局:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <android.support.v4.widget.DrawerLayout
        android:id="@+id/drawerLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <FrameLayout
            android:id="@+id/parentLayout"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            <FrameLayout
                android:id="@+id/main_container_1"
                android:layout_width="match_parent"
                android:layout_height="match_parent" />
            <FrameLayout
                android:id="@+id/main_container_2"
                android:layout_width="match_parent"
                android:layout_height="match_parent" />
        </FrameLayout>
        <FrameLayout
            android:id="@+id/leftDrawer"
            android:layout_width="@dimen/some_width"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            android:paddingTop="?android:attr/actionBarSize" />
    </android.support.v4.widget.DrawerLayout>
</FrameLayout>

我在 main_container_1 中插入了一个片段,它的布局带有以编程方式创建的 viewPager。这是 first 片段

的 OnCreateView
    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        var frameLayout = new FrameLayout(Activity)
        {
            LayoutParameters = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MatchParent, ViewGroup.LayoutParams.MatchParent)
        };

        _viewPager = new ViewPager(Activity);

        //It is required that view pager have an ID othe than -1
        _viewPager.Id = 0x00000001;

        _viewPager.PageSelected += _viewPager_PageSelected;

        _progressBar = new ProgressBar(Activity)
        {
            LayoutParameters = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WrapContent, ViewGroup.LayoutParams.WrapContent, GravityFlags.Center)
        };

        frameLayout.AddView(_viewPager);
        frameLayout.AddView(_progressBar);

        return frameLayout;
    }

当然,稍后,我通过 FragmentStatePagerAdapter 将我的数据绑定到 viewPager。

结果: 第一个片段中包含的子片段正常显示

我对 main_container_2 中的 second 片段执行相同的操作,它具有以下 onCreateView

public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        _myCustomContainer = (MyCustomLayout)inflater.Inflate(Resource.Layout.MyCustomLayout, container, false);

        _viewPager = new ViewPager(Activity);
        _myCustomContainer.AddView(_viewPager);
        //It is required that view pager have an ID othe than -1
        _viewPager.Id = 0x00000001;

        return _myCustomContainer;
    }

我使用与 first 片段的第一个 viewPager 相同类型的 FragmentStatePagerAdapter。

结果:在 Android 版本低于或等于 Jellybean (API 16) 时,second 片段已 创建 但未显示。

这是我实现 FragmentStatePagerAdapter 的 GetItem 方法

public override Fragment GetItem(int position)
    {
        if (!ActiveFragments.ContainsKey(position))
        {
            var fragment = PagedCustomFragment.NewPagedCustomFragment(position);

            ActiveFragments[position] = fragment;
        }

        return ActiveFragments[position];
    }

问题:为什么第二个片段的子片段没有显示?

您的两个 ViewPagers 似乎属于同一个父级并且具有相同的 ID,这可能是您问题的根本原因。您是否尝试过为每个 ViewPager 使用不同的 ID?