0

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

1 に答える 1

0

これは本当です。これを修正するために私が見つけた唯一の方法は、マニフェストファイルに次のものを入れることです。

android:configChanges="keyboardHidden|orientation"

警告する必要があります。これを行うと、方向が変わってもアクティビティが再現されなくなります。これは、縦向きのレイアウトが読み込まれないため、レイアウトが混乱する可能性があることを意味します。Webビューに入力する必要のあるすべての値をリロードするだけで、この問題を「修正」しました。Androidは、これらの変更を非常に迅速に処理できることが判明しました。

これがお役に立てば幸いです。

ウォッタ

于 2012-05-11T14:02:57.150 に答える