3 つのタブを持つ TabbedActivity があります。毎週、転送と通話。Transfer アクティビティには、デバイスの向きが変わるたびに維持したい WebView が含まれています。私は以下に私を導いたたくさんの例を見つけました. これにより、WebView は保存されたインスタンスに復元されたように見え、OnProgressChange 中に表示される ProgressDialog は、向きを変えた後に元に戻りません。ただし、WebView が表示するサイトにはチェックボックスがあります。また、横向きでチェックしてから縦向きにすると (またはその逆)、チェックボックスはすべて元のチェックされていない状態に戻ります。私の DropDownLists についても同じです。
[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();
}
}
}