MapActivity во фрагменте TabHost исчезает после переключения вкладок

Я пытаюсь отобразить карту в наборе вкладок, используя фрагменты. Проблема в том, что активность карты исчезает, если пользователь переходит к другому фрагменту, а затем возвращается обратно. Как я могу отобразить 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?

Большое спасибо.

5
задан Community 23 May 2017 в 12:29
поделиться