2012-05-11 8 views
0

私は3つのタブを持つTabbedActivityを持っています。毎週、転送と通話。転送アクティビティには、デバイスの向きが変更されるたびに維持したいWebViewが含まれています。私は、以下に私を導いたたくさんの例を見つけました。これでWebViewはSaved Instanceに復元されたように見え、OnProgressChange中に表示されるProgressDialogは再配置後にバックアップを表示しません。ただし、WebViewが表示するサイトにはチェックボックスがあります。また、LandscapeでチェックしてからPortraitをオンにした場合(またはその逆の場合)、チェックボックスはすべて元のチェックされていない状態に戻ります。私のDropDownListsでも同じです。WebView SaveInstanceState HTMLコントロールが元の値にリセットされないようにしない

[Activity] 
public class Transfer : Activity 
{ 
    private WebView web; 
    private static ProgressDialog progress; 

    protected override void OnCreate(Bundle bundle) 
    { 
     base.OnCreate(bundle); 

     SetContentView(Resource.Layout.Transfer);      

     web = (WebView)FindViewById(Resource.Id.web); 

     progress = new ProgressDialog(this); 

     if (bundle == null) 
     {    
      web.Settings.JavaScriptEnabled = true; 
      web.SetWebChromeClient(new CustomWebChromeClient(this)); 
      web.SetWebViewClient(new CustomWebViewClient(this)); 
      web.ClearCache(true); 
      web.LoadUrl("http://www.mysite.com"); 
     } 
     else 
     { 
      web.RestoreState(bundle); 
     } 
    } 

    protected override void OnSaveInstanceState(Bundle outState) 
    { 
     web.SaveState(outState); 
    } 

    private class CustomWebChromeClient : WebChromeClient 
    { 
     private readonly Activity _context; 

     public CustomWebChromeClient(Activity context) 
     { 
      _context = context; 
     } 

     public override void OnProgressChanged(WebView view, int newProgress) 
     { 
      progress.SetTitle(newProgress + "%"); 

      if (!progress.IsShowing) 
       { 
        progress.SetMessage("Please Wait..."); 
        progress.Show(); 
       } 
     } 
    } 

    private class CustomWebViewClient : WebViewClient 
    { 
     private readonly Activity _context; 

     public CustomWebViewClient(Activity context) 
     { 
      _context = context; 
     } 

     public override void OnPageFinished(WebView view, string url) 
     { 
      if (progress.IsShowing) 
       progress.Hide(); 
     } 
    } 
} 

答えて

0

これは私がこの問題を解決することが判明している唯一の方法は、あなたのマニフェストファイルに次のように入れている、真である:

android:configChanges="keyboardHidden|orientation"

私はあなたに警告する必要があります。これを行うことはあなたの活動を行いますオリエンテーションの変更でそれ自体を再現することはありません。これはあなたのポートレイトレイアウトがロードされないことを意味するので、レイアウトが乱れる可能性があります。私は私のwebviewに入れなければならなかったすべての値をリロードするだけでこの問題を "修正"しました。 Androidはこれらの変更を非常に迅速に処理できることが判明しました。

私はこれが役立つことを祈っています。幸運を祈る!

wottah

+0

とても早く返信いただきありがとうございます。 「私のwebviewに入れなければならないすべての価値を再読み込みする」とはどういう意味ですか? – jmease

+0

あなたのページ上のものを編集するときは、通常はJavaScriptの値だけが変更され、URLは変更されません。方向が変わると、URLがリロードされるとこれらの値がリセットされます。 – Wottah

+0

ありがとうございます。私が何を意味するのか尋ねなかったと思います。まったくどのようにあなたのウェブページにすべての値を保存して再割り当てしていますか? ViewState、クッキー、設定マネージャ、キャッシュ? – jmease

関連する問題