Можете ли вы поместить фрагменты внутри фрагмента для вкладки в панели действий?
У меня есть приложение 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() и т.д.). Два встроенных фрагмента никогда не получают ни одного из этих вызовов и никогда не закрываются.
Это вызывает проблемы при повторном выборе вкладки, поскольку среда выполнения запрашивает дубликат идентификатора фрагмента при загрузке фрагмента вкладки:
Binary XML file line #7: Duplicate id 0x7f05000a, tag null, or parent id 0x7f050009 with another fragment for ...Fragment_1
Является ли моей обязанностью удалять эти внедренные фрагменты при удалении фрагмента вкладки? Если это так, когда именно я это делаю?