0

我有一个带有 3 个选项卡的 TabbedActivity。每周、转接和通话。Transfer Activity 包含一个我想在每次设备重新定向时维护的 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();
        }
    } 
}
4

1 回答 1

0

这是真的,我发现解决此问题的唯一方法是将以下内容放入清单文件中:

android:configChanges="keyboardHidden|orientation"

我必须警告你:这样做会使你的活动不会在方向改变时重新创建。这意味着您的纵向布局将不会被加载,因此您的布局可能会搞砸。我通过重新加载我必须放入我的 webview 的所有值来“修复”这个问题。事实证明,Android 能够非常快速地处理这些变化。

我希望这会有所帮助,祝你好运!

沃塔

于 2012-05-11T14:02:57.150 回答