我有一个带有3个标签的TabbedActivity。每周,转移和电话。 Transfer Activity包含一个WebView,我希望每次设备重新定位时都要维护它。我找到了大量的例子,这些例子引导我进入下面。这样,WebView似乎恢复到已保存的实例,并且OnProgressChange期间显示的ProgressDialog在重新定向后不显示备份。但是,WebView显示的站点中包含复选框。如果在Landscape中检查它们然后转为Portrait(反之亦然),则复选框都将返回其原始未选中状态。我的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();
}
}
}
答案 0 :(得分:0)
这是事实,我找到解决此问题的唯一方法是在清单文件中添加以下内容:
android:configChanges="keyboardHidden|orientation"
我必须警告你:这样做会使你的活动不会在方向改变时重新创建。这意味着您的纵向布局不会被加载,因此您的布局可能会搞砸。我通过重新加载我必须放在webview中的所有值来“解决”这个问题。事实证明,Android能够很快处理这些变化。
我希望这有帮助,祝你好运!
Wottah