2013-12-11 62 views
0

我正在使用FragmentTabHost和TabWidget创建4个选项卡。当选择某个选项卡时,它将从其相关的类中打开相关的xml文件。可以说我选择了标签1.它在webview中打开了一个网站。然后我转到下一个选项卡,即选项卡2.当我回到选项卡1时,它重新绘制webview并再次请求该网站。它与以前一样需要相同的页面,因此毫无用处。我的意思是标签的最后状态不会被保留。它从头开始。无论我离开选项卡1,如何获取网页的最后内容?下面是代码:保存标签的上一个状态

setContentView(R.layout.bottom_tabs); 

    mTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost); 
    mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent); 

    Bundle b = new Bundle(); 
    b.putString("key", "Home"); 
    mTabHost.addTab(mTabHost.newTabSpec("home").setIndicator("Home"), 
      Home.class, b); 
    // 
    b = new Bundle(); 
    b.putString("key", "Menu"); 
    mTabHost.addTab(mTabHost.newTabSpec("menu").setIndicator("Menu"), 
      MenuDemo.class, b); 


    b = new Bundle(); 
    b.putString("key", "Promos"); 
    mTabHost.addTab(mTabHost.newTabSpec("promos").setIndicator("Promos"), 
      Promos.class, b); 

    b = new Bundle(); 
    b.putString("key", "Promos"); 
    mTabHost.addTab(mTabHost.newTabSpec("location").setIndicator("Location"), 
      Location.class, b); 

选项卡1打开本次活动:

public class Home extends Fragment{ 

public Home() { 
    // TODO Auto-generated constructor stub 

} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
} 

@SuppressLint("SetJavaScriptEnabled") 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    View v = LayoutInflater.from(getActivity()).inflate(R.layout.home, 
      null); 
    WebView webView = (WebView) v.findViewById(R.id.webViewHome); 
    webView.setWebViewClient(new MyWebViewClient()); 
    webView.getSettings().setJavaScriptEnabled(true); 
    webView.loadUrl("http://www.google.com"); 

    return v; 
} 
private class MyWebViewClient extends WebViewClient { 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     view.loadUrl(url); 
     return true; 
    } 
} 

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onActivityCreated(savedInstanceState); 
} 
// 

}

+1

请参考[这个问题](http://stackoverflow.com/questions/10258772/android-webview-savestate)。我认为这可能有帮助。 –

+0

你应该隐藏片段点击和当你回到该选项卡再次显示它。 – Rudi

回答

0

在你mainTab活动,你应该做这样的事情隐藏片段并检查它是否已经加载只是显示它:

public void onTabChanged(String tag) { 
     TabInfo newTab = this.mapTabInfo.get(tag); 
     if (mLastTab != newTab) { 
      FragmentTransaction ft = this.getSupportFragmentManager() 
        .beginTransaction(); 
      if (mLastTab != null) { 
       if (mLastTab.fragment != null) { 
        // ft.detach(mLastTab.fragment); 
        ft.hide(mLastTab.fragment); 
       } 
      } 
      if (newTab != null) { 
       if (newTab.fragment == null) { 
        newTab.fragment = Fragment.instantiate(this, 
          newTab.clss.getName(), newTab.args); 
        ft.add(R.id.realtabcontent, newTab.fragment, newTab.tag); 
       } else { 

        // ft.attach(newTab.fragment); 
        ft.show(newTab.fragment); 

       } 
      } 

      mLastTab = newTab; 
      ft.commit(); 
      this.getSupportFragmentManager().executePendingTransactions(); 

     } 
    } 

并发送标签的标签。

希望它能帮助:)