在操作栏(Action Bar)的选项卡中,您可以将片段放入片段中吗?
我有一个Android(3.0/Honeycomb)应用程序,其中主活动具有带有3个选项卡的操作栏。选项卡是在我的活动的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
当选项卡片段被删除时,我是否需要负责删除这些嵌入的片段?如果是,那么我应该在什么时候进行删除?
android:id="@+id/frag2"
行是故意的还是在这里发布问题时出现了转录错误? - adamp