您可以将片段放入片段中以获取操作栏中的选项卡吗?
我有一个Android(3.0 / Honeycomb)应用程序,其主要活动有一个带有3个选项卡的Action Bar。选项卡将添加到我的activity的onCreate()方法中,并使用TabListener添加/删除选项卡片段。该代码与http://developer.android.com/guide/topics/ui/actionbar.html#Tabs处的示例几乎相同。
TabListener如下所示:
public class SwapOutTabListener implements ActionBar.TabListener {
public SwapOutTabListener(Fragment fragment) {
_fragment = fragment;
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
ft.add(R.id.fragment_container, _fragment, null);
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
ft.remove(_fragment);
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
// do nothing
}
private Fragment _fragment;
}
我的两个标签是简单的片段,它们只包含一个TextView,有点像这样(为清晰起见,删除了大多数属性):
<LinearLayout>
<TextView android:text="Tab 1" />
</LinearLayout>
但是我的一个标签的片段更复杂,并且包含两个嵌入的片段,有点像这样:
<LinearLayout>
<fragment
android:name="...Fragment_1"
android:id="@+id/frag1"
/>
<fragment
android:name="...Fragment_2"
android:id="@+id/frag2"
/>
</LinearLayout>
当用户选择此片段的选项卡时,将调用所有三个片段(选项卡片段以及两个嵌入片段)的所有启动生命周期方法(onStart(),onResume())。
但是当用户然后选择另一个选项卡时,只有选项卡片段获得任何生命周期结束方法(onPause(),onStop()等)。两个嵌入的片段永远不会得到任何这些调用,也永远不会关闭。
重新选择选项卡时会出现问题,因为运行时在加载选项卡片段时会抱怨重复的片段ID:
Binary XML file line #7: Duplicate id 0x7f05000a, tag null, or parent id 0x7f050009 with another fragment for ...Fragment_1
删除标签片段时,我有责任删除这些嵌入的片段吗?如果是这样的话,我确实是这样做的吗?
答案 0 :(得分:19)
不,片段当前不在层次结构中。我看着这样做,但是在这一点上,它的所有用例主要是由极端过度使用的片段驱动的,其中每个单独的UI元素都是作为片段实现的。这不是他们打算如何使用,它们旨在封装应用程序的主要顶级部分。如果你有一个东西的层次结构,那就是你的布局和视图。
答案 1 :(得分:1)
AHHHH。实现的感觉。我刚刚发现了这个 - “注意:当布局包含a时,你不能将布局膨胀成片段。只有在动态添加到片段时才支持嵌套片段。”
http://developer.android.com/about/versions/android-4.2.html#NestedFragments