Я пытаюсь отобразить карту в наборе вкладок, используя фрагменты. Проблема в том, что активность карты исчезает, если пользователь переходит к другому фрагменту, а затем возвращается обратно. Как я могу отобразить MapActivity во фрагментах в tabhost?
Основанием для этого послужили многочисленные вопросы о том, как интегрировать MapActivity с фрагментами (см. MapView во фрагменте (Honeycomb))
MainTabActivity имеет tabhost и использует FragmentManager для отображения фрагментов во вкладках.
MapFragment имеет tabhost и использует его для отображения MapActivity.
MapFragment использует LocalActivityManager для распространения событий жизненного цикла на содержащуюся активность.
Итак, MapFragment:
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.map_fragment, container, false);
mTabHost = (TabHost) view.findViewById(android.R.id.tabhost);
mTabHost.setup(getLocalActivityManager());
Intent intent = new Intent(getActivity(), MapActivityWrapper.class);
// intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);//does nothing
TabHost.TabSpec tab = mTabHost.newTabSpec("map")
.setIndicator("map")
.setContent(intent);
mTabHost.addTab(tab);
return view;
}
MapFragment layout:
Код в MainTabActivity для изменения содержимого вкладки:
private void updateTab(String oldId, String tabId) {
FragmentManager fm = getSupportFragmentManager();
Fragment old = fm.findFragmentByTag(oldId);
Fragment selected = fm.findFragmentByTag(tabId);
FragmentTransaction ft = fm.beginTransaction();
boolean added = false;
if (selected == null) {
selected = createFragment(tabId);
} else {
try {
ft.remove(selected);
} catch (Exception e) {
ft.add(android.R.id.tabcontent, selected, tabId);
added = true;
//exception for removing an unadded fragment... why throw an exception?
}
}
if (old != null) ft.remove(old);
if (!added) ft.replace(android.R.id.tabcontent, selected, tabId);
if (!creating && !backStackProcessing) ft.addToBackStack(null);//member vars
ft.commit();
}
MainTabActivity layout (удалил кучу несвязанных layout):
Снова - Проблема, с которой я сталкиваюсь, заключается в том, что активность карты исчезает, если пользователь переходит на другой фрагмент, а затем обратно. Как я могу отобразить MapActivity во фрагментах в tabhost?
Большое спасибо.