附图显示了一个包含3页的ViewPager。每个页面都实现为片段。工具栏上有一个黑色的+图标,用于添加新患者。按下+图标时,应在患者页面内创建一个嵌套片段,以便创建新患者。
在Logcat中,我可以看到嵌套片段的片段生命周期回调被调用到onResume()
,但是不会渲染嵌套片段的视图。
我这样做是为了创建嵌套片段并将其插入父片段视图层次结构中:
FrPatientDetails frChild = new FrPatientDetails();
FragmentTransaction transaction = getChildFragmentManager().beginTransaction()
.replace(R.id.flPatientsPage, frChild);
transaction.addToBackStack(null)
.commit();
R.id.flPatientsPage
是患者页面中的FrameLayout
,我试图插入嵌套片段。
我感觉将子片段插入ViewPager
中托管的父片段的方式可能有所不同,但我不清楚该怎么做。
有人能够在这里提供帮助。
更新:为患者页面添加了xml(父级)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/patients_page_linear_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ListView
android:id="@+id/lvHomeViewPatientsPage"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:divider="@color/colorPrimary"
android:dividerHeight="1dp"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="8dp"
android:textColor="@android:color/black" />
<TextView
android:id="@+id/tvEmpty"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:textColor="@android:color/black"
android:text="@string/patients_page_empty"
android:fontFamily="sans-serif"
android:gravity="center"
android:textSize="16sp"
/>
<FrameLayout
android:id="@+id/flPatientsPage"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
答案 0 :(得分:2)
总结一下,这是我面临的问题:
活动A包含TabLayout
和ViewPager(V)
。 V包含3页(片段)。其中一个片段(F1)包含一个子片段C.我能够显示F1。当用户点击F1中的按钮时,我无法显示C.
解决方案:V使用FragmentPagerAdapter设置片段。在FragmentPagerAdapter.getItem()
内,不直接启动F1。相反,启动一个名为F1Wrapper的片段,其中包含FrameLayout
。在F1Wrapper.onCreateView()
内,创建一个FragmentTransaction
向后台添加F1。使用getChildFragmentManager
创建交易。将F1Wrapper的FrameLayout作为F1的视图容器传递。
当用户单击F1中的按钮以启动片段C时,在F1Wrapper中创建一个FragmentTransaction.replace()
,它将C添加到backstack。使用getChildFragmentManager
创建交易。再次,传递F1Wrapper的FrameLayout作为C的视图容器.C现在将替换后台中的F1并将显示。
注意:您无法将ViewPager作为C的视图容器传递。这是问题的关键,也是我们需要使用包装器片段的主要原因。如果将V作为C的视图容器传递,则C.onCreateView()将崩溃。