Android WebView SaveInstanceState不阻止HTML控件重置为原始值

Android WebView SaveInstanceState不阻止HTML控件重置为原始值,android,asp.net,webview,xamarin.android,Android,Asp.net,Webview,Xamarin.android,我有一个包含3个选项卡的选项卡式活动。每周,转机和电话。“传输”活动包含我希望在每次设备重新定向时维护的WebView。我找到了大量的例子,这些例子让我得出了下面的结论。这样,WebView似乎恢复到保存的实例,并且在OnProgressChange期间显示的ProgressDialog在重新定向后不会显示。但是,WebView显示的站点中有复选框。如果在横向中选中它们,然后将其设置为纵向(反之亦然),则所有复选框都会返回到其原始未选中状态。我的下拉列表也是如此 [Activity] publi

我有一个包含3个选项卡的选项卡式活动。每周,转机和电话。“传输”活动包含我希望在每次设备重新定向时维护的WebView。我找到了大量的例子,这些例子让我得出了下面的结论。这样,WebView似乎恢复到保存的实例,并且在OnProgressChange期间显示的ProgressDialog在重新定向后不会显示。但是,WebView显示的站点中有复选框。如果在横向中选中它们,然后将其设置为纵向(反之亦然),则所有复选框都会返回到其原始未选中状态。我的下拉列表也是如此

[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();
        }
    } 
}

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

android:configChanges=“keyboardHidden | orientation”

我必须警告你:这样做会使你的活动不会在方向改变时重新开始。这意味着您的肖像布局将无法加载,因此您的布局可能会混乱。我“修复”了这个问题,只需重新加载我必须在webview中输入的所有值。事实证明,Android能够非常快速地处理这些变化

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


Wottah

谢谢您这么快回复。“重新加载我必须在webview中输入的所有值”是什么意思?当你编辑页面上的内容时,通常只会更改javascript值,而不会更改URL。但是当方向改变时,这些值会随着URL的重新加载而重置。谢谢。我想我没有问我的意思。你到底是如何将所有值保存并重新分配到你的网页的?视图状态、cookies、首选项管理器、缓存?我不是。我只知道我想在图像中更改什么(我必须编辑SVG文档的属性)。我不知道是否有可能保存你提到的东西。对不起,我真的不明白。我是100%自学成才的,所以我的术语并不总是很好。当你说“重新加载我必须在webview中输入的所有值”时,我真的不知道你指的是什么。你有什么例子吗?