我有以下布局:
<?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 的布局。这是第一个片段
的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;
}
我使用与第一个片段的第一个viewPager相同类型的FragmentStatePagerAdapter。
结果:在Android版本低于或等于Jellybean(API 16)时,第二个片段的子片段已创建但不是显示。
这是我实现FragmentStatePagerAdapter
的GetItem方法public override Fragment GetItem(int position)
{
if (!ActiveFragments.ContainsKey(position))
{
var fragment = PagedCustomFragment.NewPagedCustomFragment(position);
ActiveFragments[position] = fragment;
}
return ActiveFragments[position];
}
问题:为什么第二个片段的子片段没有显示?
答案 0 :(得分:0)
您的ViewPagers似乎属于同一个父级,并且具有相同的ID,这可能是您的问题的根本原因。您是否尝试为每个ViewPager使用不同的ID?