2014-01-09 25 views
1

我有一個帶有功能WebView1和3個按鈕的活動A.我在onPause下保存了Webview1狀態,因此一旦活動B打開,WebView1的狀態已經保存。我的問題是,無論何時打開Activity B並嘗試將WebView1保存狀態加載到WebView11上的活動B上,它都會給我一個空指針(手機上的白色屏幕)。如何保存活動A的webview狀態,以便在活動B中恢復?將WebView保存狀態傳遞給另一個活動

示例:Im on activity頁面底部的webview我想保存該狀態,所以一旦打開activity 2 webview,它就會將我帶到同一頁面的底部,而不是重新加載頁面。

主要活動

public class MainActivity extends Activity { 

public Bundle webViewBundle; 
WebView wv; 
Button bt1; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    wv = (WebView) findViewById(R.id.webView1); 

    WebSettings webSettings = wv.getSettings(); 
    webSettings.setJavaScriptEnabled(true); 
    webSettings.setSupportZoom(true); 
    webSettings.setBuiltInZoomControls(true); 

    wv.loadUrl("http://www.google.com"); 
    wv.setWebViewClient(new myWebViewClient()); 

    addListenerOnbt1(); 

} 

public void addListenerOnbt1() { 

    // Select a specific button to bundle it with the action you want 
    bt1 = (Button) findViewById(R.id.button1); 

    bt1.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View view) { 

      Intent intent = new Intent(MainActivity.this, Activity2.class); 

      Bundle name=webViewBundle; 
      intent.putExtra("name", name); 

      startActivity(intent); 
      finish(); 
     } 
    }); 
} 


@Override 
    public void onPause() 
    { 
     super.onPause(); 

     webViewBundle = new Bundle(); 
     wv.saveState(webViewBundle); 
    } 

>

活性2

public class Activity2 extends Activity { 

WebView wv2; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.second_main); 

    Bundle b = new Bundle(); 
    b = getIntent().getExtras(); 
    String name = b.getString("name"); 

    final RelativeLayout rl = new RelativeLayout(this); 
    wv2 = (WebView) findViewById(R.id.webView11); 

    WebSettings webSettings = wv2.getSettings(); 
    webSettings.setJavaScriptEnabled(true); 

    wv2.restoreState(b); // This line returns Null or white screen 

} 

} >

預先感謝您的幫助。

+0

你解決了嗎? – dipali

回答

3

嘗試保存WebView狀態並一次性啓動下一個活動。

Bundle state = new Bundle(); 
webView.saveState(state); 

Intent intent = new Intent(MainActivity.this, Activity2.class); 
intent.putExtra("state", state); 
intent.putExtra("name", name); 

然後從額外恢復它。

webView.restoreState((Bundle)intent.getParcelableExtra("state")); 
+0

謝謝,它的工作原理。必須調整「webView.restoreState((Bundle)intent.getParcelableExtra(」state「));」到「webView.restoreState((Bundle)getIntent()。getParcelableExtra(」state「));」但我注意到這樣做的一個問題。出於某種原因,webview狀態會在某些網頁上恢復,但不是全部。現在發生的事情是,在不恢復頁面的網頁上,它只是將我帶到頁面的頂部,而不是我之前所處的正確狀態。有任何想法嗎?? – user3176289

+0

我還沒有嘗試過,但是對於我可能很快就會出現的新用例來說,這聽起來很酷! – MCLLC

相關問題