2011-10-05 19 views
2

首先我會粘貼我的代碼。如何在SaveInstanceState中保存兩個webview?

public class ZSEEActivity extends TabActivity { 
private WebView webview ; 
private WebView webviewtwo; 




/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    final Activity activity = this; 


    TabHost mTabHost = getTabHost(); 

    mTabHost.addTab(mTabHost.newTabSpec("tab_test1").setIndicator("Zastępstwa").setContent(R.id.tab1)); 
    mTabHost.addTab(mTabHost.newTabSpec("tab_test2").setIndicator("Plan Lekcji").setContent(R.id.tab2)); 
    mTabHost.addTab(mTabHost.newTabSpec("tab_test3").setIndicator("O programie").setContent(R.id.tab3)); 

    mTabHost.setCurrentTab(0); 


    webview = (WebView) findViewById(R.id.webView1); 
    webviewtwo = (WebView) findViewById(R.id.webView2); 
    WebSettings webviewtwoSettings = webviewtwo.getSettings(); 
     if (savedInstanceState != null){ 
      webview.restoreState(savedInstanceState); 
      webviewtwo.restoreState(savedInstanceState); 
     } 
     else{ 
      webview.loadUrl("http://zsee.bytom.pl/ogloszenia.php"); 
      webviewtwoSettings.setDefaultFontSize(30); 
      webviewtwo.loadUrl("http://zsee.bytom.pl/plany/index.html"); 
     } 


    webview.setWebViewClient(new WebViewClient() { 
      public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
       String summary = "<html><body><meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" ><center>Coś się zepsuło :(</center></body></html>"; 
       webview.loadData(summary, "text/html","utf-8"); 
      Toast.makeText(activity, "O nie! " + description, Toast.LENGTH_SHORT).show(); 
      } 
     }); 

    webviewtwo.setWebViewClient(new WebViewClient() { 
     public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
      String summary = "<html><body><meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" ><center>Coś się zepsuło :(</center></body></html>"; 
      webviewtwo.loadData(summary, "text/html","utf-8"); 
     Toast.makeText(activity, "O nie! " + description, Toast.LENGTH_SHORT).show(); 
     } 
    }); 

    } 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.main, menu); 
    return true; 
} 

protected void onSaveInstanceState(Bundle outState, Bundle Test) { 
    webview.saveState(outState); 
    webviewtwo.saveState(Test); 
} 



public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle item selection 
    switch (item.getItemId()) { 
    case R.id.item1: 
     AlertDialog alertdialog= new AlertDialog.Builder(this).create(); 
     alertdialog.setTitle("Pomoc"); 
     alertdialog.setMessage("Lepszy Planer od Sierran'a :>"); 
     alertdialog.show(); 
     return true; 
    case R.id.item2: 
     finish(); 
    case R.id.item3: 
     webview.loadUrl("http://zsee.bytom.pl/ogloszenia.php"); 
     System.out.print("ss"); 
    default: 
     return super.onOptionsItemSelected(item); 
    } 
} 
} 

現在是我的問題。我有兩個webview小部件。一個叫做webview,另一個叫webviewtwo。我是android程序中的新手,所以我有問題如何在onSaveInstanceState中保存兩個小部件以及如何恢復它們。現在webviewtwo覆蓋webview和webview窗口我有webviewtwo網頁。如何解決它並做對嗎?

Sierran

回答

1

onSaveInstanceState只接受一個Bundle。

保存網頁視圖狀態到獨立的捆綁,然後把它們放入一個保存:

Bundle state1=new Bundle(); 
webview.saveState(state1); 
Bundle state2=new Bundle(); 
webviewtwo.saveState(state2); 
outState.putBundle("state1",state1); 
outState.putBundle("state2",state2); 
super.onSaveInstanceState(outState); 

恢復:

webview.restoreState(savedInstanceState.getBundle("state1")); 
webviewtwo.restoreState(savedInstanceState.getBundle("state2")); 
+0

謝謝:)現在,所有的工作,我知道如何使用SaveInstanceState: ) – Sierran

2

這是我的理解是應該的onSaveInstanceState被用來堅持到重新構建應用程序所需要的任何動態信息。您不希望持續實際的小部件,而是需要自行恢復的信息。

相關問題