title: TabHost disappears after locking the phone and reopening it:
body: <p>I have a weird issue with my <code>TabHost</code> in my <code>FragmentActivity</code> that contains a <code>ViewPager</code>.</p>
  
  <p>The problem is that when I close my phone (press the power button) while I use my application, and then I turn back the phone and my application gets reopened, at this point my <code>TabHost</code> is missing. So the closing of my phone is causes the <code>TabHost</code> to disappear.</p>
  
  <p>My guess would be that I need to save my <code>tabHost</code> state in the <code>saveInstanceState</code> object, and restore it in <code>onResume</code> I only have no idea how it's done. here is my code for the <code>FragmentActivity</code>:</p>
  
  <pre><code>public class TabsViewPagerFragmentActivity extends FragmentActivity implements    ViewPager.OnPageChangeListener, TabHost.OnTabChangeListener 
  {
  static final String TAG = TabsViewPagerFragmentActivity.class.getSimpleName();
  private TabHost mTabHost;
  private ViewPager mViewPager;
  private HashMap&lt;String, TabInfo&gt; mapTabInfo;
  public ViewPagerAdapter mPagerAdapter;
  private TextView tvReportName, tvTabTitle;
  private Button bBackToParameters;
  private Dialog progressDialog;
  private SGRaportManagerAppObj application;
  private int numberOfTabs = 0;
  private Display display;
  public static final int POPUP_MARGIN = 6;
  LeftSideMenu leftSideMenu;
  
  public void NotifyTabActivityViewPagerAdapter()
  {
      mPagerAdapter.notifyDataSetChanged();
  }
  
  public ViewPagerAdapter getTabActivityViewPagerAdapter()
  {
      return mPagerAdapter;
  }
  
  public ViewPager getTabActivityViewPager()
  {
      return mViewPager;
  }
  
  public void setCurrentTabTitle (String title)
  {
      tvTabTitle.setText(title);
      Log.d(TAG, "set tab title from activity: "+title);
  }
  
  
  /**
  * Maintains extrinsic info of a tab's construct
  */
  private class TabInfo 
  {
      private String tag;
      private Class&lt;?&gt; clss;
      private Bundle args;
      private Fragment fragment;
  
      TabInfo(String tag, Class&lt;?&gt; clazz, Bundle args) 
      {
          this.tag = tag;
          this.clss = clazz;
          this.args = args;
      }
  }
  
  /**
   * A simple factory that returns dummy views to the Tabhost
   */
  class TabFactory implements TabContentFactory {
  
      private final Context mContext;
  
      /**
       * @param context
       */
      public TabFactory(Context context) {
          mContext = context;
      }
  
      /** (non-Javadoc)
       * @see android.widget.TabHost.TabContentFactory#createTabContent(java.lang.String)
       */
      public View createTabContent(String tag) {
          View v = new View(mContext);
          v.setMinimumWidth(0);
          v.setMinimumHeight(0);
          return v;
      }
  }
  
  /** (non-Javadoc)
   * @see android.support.v4.app.FragmentActivity#onCreate(android.os.Bundle)
  */
  public void onCreate(Bundle savedInstanceState) 
  {
      super.onCreate(savedInstanceState);
      application = SGRaportManagerAppObj.getInstance();
      display = ((WindowManager)getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
      // Inflate the layout
      setContentView(R.layout.tabs_screen_activity_layout);
      tvTabTitle = (TextView) findViewById(R.id.tvTabName);
      tvReportName = (TextView)findViewById(R.id.tvReportName);
      tvReportName.setText(application.currentReport.getName()+ " - ");
      bBackToParameters = (Button) findViewById(R.id.bBackToParameters);
      leftSideMenu = (LeftSideMenu) findViewById(R.id.leftSideMenu);
      applyOnClickListenerToLeftSideMenu();
  
      findViewById(R.id.showLeftMenuButton).setOnClickListener(new View.OnClickListener() 
      {
          @Override
          public void onClick(View v) 
          {               
              Display d = ((WindowManager)getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
              int width = d.getWidth();
  
              View panel = findViewById(R.id.leftSideMenu);
              View appPanel = findViewById(R.id.appLayout);
              if (panel.getVisibility() == View.GONE){
                  appPanel.setLayoutParams(new LinearLayout.LayoutParams(width, LayoutParams.FILL_PARENT));
                  panel.setVisibility(View.VISIBLE);
                  applyOnClickListenerToLeftSideMenu();
              }else{
                  ToggleButton button = (ToggleButton) findViewById(R.id.showLeftMenuButton);
                  button.setChecked(false);
                  panel.setVisibility(View.GONE);
              }
          }
      });
  
      // Initialise the TabHost
      progressDialog = DialogUtils.createProgressDialog(this, this.getString(R.string.populating_view_pager));
      progressDialog.show();
  
      if (SGRaportManagerAppObj.getInstance().parametersRepository.getParametersRepository().size() == 0)
      {
          bBackToParameters.setText(R.string.back_to_report_list);
      }
      this.initialiseTabHost(savedInstanceState);
  
      if (savedInstanceState != null) {
          mTabHost.setCurrentTabByTag(savedInstanceState.getString("tab")); //set the tab as per the saved state
      }
      // Intialise ViewPager
      this.intialiseViewPager();
      progressDialog.dismiss();
  }
  
   /** (non-Javadoc)
   * @see android.support.v4.app.FragmentActivity#onSaveInstanceState(android.os.Bundle)
   */
  protected void onSaveInstanceState(Bundle outState) {
      outState.putString("tab", mTabHost.getCurrentTabTag()); //save the tab selected
      super.onSaveInstanceState(outState);
  }
  
  /**
   * Initialise ViewPager
   */
  public void intialiseViewPager() 
  {
  
      List&lt;Fragment&gt; fragments = new Vector&lt;Fragment&gt;();
  
    // TabInfo tabInfo = null;
  
      if (application.getCurrentDataSource().equals(DataSource.SSRS))
      {
          numberOfTabs = application.currentReport.getTabsList().size();
      }
      else if (application.getCurrentDataSource().equals(DataSource.SGRDL))
      {
          numberOfTabs = application.currentReport.getODTabsList().size();
          Log.d(TAG, "CURRENT REPORT FROM VIEW PAGER: "+ application.currentReport.toString());
      }   
  
      Log.d(TAG,"Current Tabs number from TabsViewPager activity: " +numberOfTabs);
  
      if (application.getCurrentDataSource().equals(DataSource.SSRS))
      {
           for (int i = 0; i &lt; numberOfTabs; i++)     
           {
              Tab tempTab = application.currentReport.getTabsList().get(i);
              if (tempTab.getTabTemplateId() == 7)
              {
                  GridFragment gridFragment = new GridFragment(tempTab);
                  fragments.add(gridFragment);
              }
              else  if (tempTab.getTabTemplateId() == 8)
              {
                  NewChartFragment chartFragment = new NewChartFragment(tempTab, this);
                  fragments.add(chartFragment);
              }
           }
      }
      else if (application.getCurrentDataSource().equals(DataSource.SGRDL))
      {
           for (int i = 0; i &lt; numberOfTabs; i++)     
           {
              ODTab tempTab = application.currentReport.getODTabsList().get(i);
              if (tempTab.getTabType().equals(ODGrid.XML_GRID_ELEMENT))
              {
                  GridFragment gridFragment = GridFragment.newInstance(tempTab.getTabId());
                  fragments.add(gridFragment);
              }
              else  if (tempTab.getTabType().equals(ODChart.XML_CHART_ELEMENT))
              {
                  NewChartFragment chartFragment = NewChartFragment.newInstance(tempTab.getTabId());
                  fragments.add(chartFragment);
              }
           }
      }   
  
      Log.d(TAG, "Current report fragments set to adapter: "+fragments.toString());
     /*
      if (this.mPagerAdapter == null)
      {
          this.mPagerAdapter  = new ViewPagerAdapter(super.getSupportFragmentManager(), fragments);
      }
      else
      {
          this.mPagerAdapter.removeAllFragments();
          this.mPagerAdapter.addFragmentsListToAdapter(fragments);
      }
      */
      this.mPagerAdapter  = new ViewPagerAdapter(super.getSupportFragmentManager(), fragments);
      this.mViewPager = (ViewPager)super.findViewById(R.id.pager);
  //    this.mViewPager.setAdapter(null);
      this.mViewPager.setAdapter(this.mPagerAdapter);
      this.mViewPager.setOffscreenPageLimit(0);
      this.mViewPager.setOnPageChangeListener(this);
      Log.d(TAG, "Adapter initialized!");
  }
  
  /**
   * Initialise the Tab Host
   */
  public void initialiseTabHost(Bundle args) {
      mTabHost = (TabHost)findViewById(android.R.id.tabhost);
  
      /*
      //new edit
      if (mTabHost.getChildCount() &gt; 0)
      {
          mTabHost.removeAllViews();
      }
      */
  
      mTabHost.setup();
      TabInfo tabInfo = null;
      mapTabInfo = new HashMap&lt;String, TabsViewPagerFragmentActivity.TabInfo&gt;();
      if (args != null)
      {}
      else
      {
          if (application.getCurrentDataSource().equals(DataSource.SSRS))
          {
              int numberOfTabs = application.currentReport.getTabsList().size();
              for (int i = 0; i &lt; numberOfTabs; i++)      
              {
                  Tab tempTab = application.currentReport.getTabsList().get(i);
                  if (tempTab.getTabTemplateId() == 7)
                  {
                      //GridFragment gridFragment = new GridFragment(tempTab);
                      TabsViewPagerFragmentActivity.AddTab(this, this.mTabHost, this.mTabHost.newTabSpec("Tab "+String.valueOf(i)).setIndicator("Tab "+String.valueOf(i)), ( tabInfo = new TabInfo("Tab "+String.valueOf(i), GridFragment.class, args)));
                      this.mapTabInfo.put(tabInfo.tag, tabInfo);
                  }
                  else  if (tempTab.getTabTemplateId() == 8)
                  {
                      TabsViewPagerFragmentActivity.AddTab(this, this.mTabHost, this.mTabHost.newTabSpec("Tab "+String.valueOf(i)).setIndicator("Tab "+String.valueOf(i)), ( tabInfo = new TabInfo("Tab "+String.valueOf(i), NewChartFragment.class, args)));
                      this.mapTabInfo.put(tabInfo.tag, tabInfo);
                  }
              }
          }
  
          else if (application.getCurrentDataSource().equals(DataSource.SGRDL))
          {
              int numberOfTabs = application.currentReport.getODTabsList().size();
              for (int i = 0; i &lt; numberOfTabs; i++)      
              {
                  ODTab tempTab = application.currentReport.getODTabsList().get(i);
              //  Log.d(TAG,"Crashed Tab type: "+ tempTab.getTabType());
                  if (tempTab.getTabType().equals(ODGrid.XML_GRID_ELEMENT))
                  {
                      //GridFragment gridFragment = new GridFragment(tempTab);
                      TabsViewPagerFragmentActivity.AddTab(this, this.mTabHost, this.mTabHost.newTabSpec("Tab "+String.valueOf(i)).setIndicator("Tab "+String.valueOf(i)), ( tabInfo = new TabInfo("Tab "+String.valueOf(i), GridFragment.class, args)));
                      this.mapTabInfo.put(tabInfo.tag, tabInfo);
                  }
                  else  if (tempTab.getTabType().equals(ODChart.XML_CHART_ELEMENT))
                  {
                      TabsViewPagerFragmentActivity.AddTab(this, this.mTabHost, this.mTabHost.newTabSpec("Tab "+String.valueOf(i)).setIndicator("Tab "+String.valueOf(i)), ( tabInfo = new TabInfo("Tab "+String.valueOf(i), NewChartFragment.class, args)));
                      this.mapTabInfo.put(tabInfo.tag, tabInfo);
                  }
              }
          }
      }
      // Default to first tab
      //this.onTabChanged("Tab1");
      //
      mTabHost.setOnTabChangedListener(this);
  }
  
  /**
   * Add Tab content to the Tabhost
   * @param activity
   * @param tabHost
   * @param tabSpec
   * @param clss
   * @param args
   */
  private static void AddTab(TabsViewPagerFragmentActivity activity, TabHost tabHost, TabHost.TabSpec tabSpec, TabInfo tabInfo) 
  {
      // Attach a Tab view factory to the spec       
      ImageView indicator = new ImageView(activity.getBaseContext());
      indicator.setPadding(10, 10, 10, 10);
      indicator.setImageResource(R.drawable.tab_select_icon_selector);
      LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
      lp.setMargins(10, 10, 10, 10);
      indicator.setLayoutParams(lp);
      tabSpec.setIndicator(indicator); 
      tabSpec.setContent(activity.new TabFactory(activity));
      tabHost.addTab(tabSpec);
  }
  
  /** (non-Javadoc)
   * @see android.widget.TabHost.OnTabChangeListener#onTabChanged(java.lang.String)
   */
  public void onTabChanged(String tag) {
      //TabInfo newTab = this.mapTabInfo.get(tag);
      int pos = this.mTabHost.getCurrentTab();
      this.mViewPager.setCurrentItem(pos);
  }
  
  /* (non-Javadoc)
   * @see android.support.v4.view.ViewPager.OnPageChangeListener#onPageScrolled(int, float, int)
   */
  @Override
  public void onPageScrolled(int position, float positionOffset,
          int positionOffsetPixels) {
      // TODO Auto-generated method stub
  
  }
  
  /* (non-Javadoc)
   * @see android.support.v4.view.ViewPager.OnPageChangeListener#onPageSelected(int)
   */
  @Override
  public void onPageSelected(int position) {
      // TODO Auto-generated method stub
      this.mTabHost.setCurrentTab(position);
  }
  
  
  /* (non-Javadoc)
   * @see android.support.v4.view.ViewPager.OnPageChangeListener#onPageScrollStateChanged(int)
   */
  @Override
  public void onPageScrollStateChanged(int state) {
      // TODO Auto-generated method stub
  
  }
  </code></pre>
  
  <p>How would one save the state of the <code>TabHost</code> and restore it in <code>onResume</code>?</p>
  
  <p>Any help would be very appreciated.</p>