0

いくつかの練習の後、openFileChooser() を使用して携帯電話からファイルを選択し、OnActivityResult() を介して結果を取得できます。私の問題は、ファイル チューザーを開いた後、フラグメントが OnPause() に移動し、ファイルを選択した後に WebView コンテンツを失い、OnStart() に移動することです。ページ全体をリロードしたくありません。以前のコンテンツを保持し、選択したファイルを webview に追加する方法はありますか?

選択したファイルの内容を正しく取得できることを繰り返します。私の問題は、OnActivityResult() の後に呼び出される Onstart() メソッドにあります。OnCreateView() に書いた内容が保持されない理由がわかりません。これが私のコードです:

    private View _createdView;
    private InternalWebView _client;
    private UserControls.ChromeClient _chromeClient;

    private WebView _webview;
    private Fragment_Progressbar _fragment_progressbar;
    private bool _isFromFileSelection = false;
    private Android.Net.Uri selectedFile;

    public override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);

    }
    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        _createdView = CreateAndConfigLayout(inflater, container, Resource.Layout.WebContainer, Resource.Id.WebviewMainContainer);
        _webview = _createdView.FindViewById<WebView>(Resource.Id.webView1);
        _webview.Touch += webview_Touch;
        _webview.Click += webview_Click;

        if (_client == null)
        {
            _client = new InternalWebView(SecurityPreference.Instance.GetLastCorrectUseName(), SecurityPreference.Instance.GetLastCorrectPassword());
        }
        if (_chromeClient == null)
        {
            _chromeClient = new UserControls.ChromeClient(this);
        }
        _fragment_progressbar = new Fragment_Progressbar(Activity, 1200);
        _fragment_progressbar.startLoad();

        RefreshData();

        return _createdView;
    }

    public override void OnActivityResult(int requestCode, int resultCode, Intent data)
    {
        if (data != null)
        {
            if (requestCode == 1)
            {
                if (null == UploadMessage || data == null)
                    return;
                selectedFile = data == null || resultCode != 1 ? null : data.Data;
                UploadMessage.OnReceiveValue(selectedFile);
                UploadMessage = null;
            }
        }
    }

    public override void OnStart()
    {
        base.OnStart();
    }

    public override void OnPause()
    {
        base.OnPause();
    }

    public override void RefreshData()
    {
        if (this.Arguments != null || this.Arguments.ContainsKey("Address"))
        {
            var addrress = this.Arguments.GetString("Address");

            if (!string.IsNullOrEmpty(addrress))
            {
                _webview.SetWebViewClient(_client);
                _webview.SetWebChromeClient(_chromeClient);
                _webview.Settings.JavaScriptEnabled = true;
                _webview.Settings.PluginsEnabled = true;
                _webview.Settings.SetAppCacheEnabled(true);
                _webview.Settings.DomStorageEnabled = true;
                _webview.Settings.AllowContentAccess = true;
                _webview.Settings.AllowFileAccessFromFileURLs = true;
                _webview.Settings.AllowUniversalAccessFromFileURLs = true;

                _webview.Settings.AllowFileAccess = true;
                var serverAddress = Configurations.GetServerAddress();
                if (addrress.StartsWith(serverAddress))
                {
                    var resultAddress = Configurations.GetRedirectAddress(addrress);
                    _webview.PostUrl(resultAddress, EncodingUtils.GetBytes("Username=" + SecurityPreference.Instance.GetLastCorrectUseName() + "&password=" + SecurityPreference.Instance.GetLastCorrectPassword(), "BASE64"));
                    _webview.SetDownloadListener(new MyDownloadListener(MainFragment));
                }
                else
                {
                    _webview.LoadUrl(addrress);
                }

            }
        }
        SetHeaderTitle();
    }

編集:

そして、これが私の openFileChooser メソッドです。

 public void openFileChooser(IValueCallback uploadMsg, String acceptType, String capture)
    {
        mUploadMessage = uploadMsg;
        webFragment.UploadMessage = uploadMsg;
        Intent i = new Intent(Intent.ActionGetContent);
        i.AddCategory(Intent.CategoryOpenable);
        i.SetType("*/*");
        webFragment.Activity.StartActivityForResult(Intent.CreateChooser(i, "Choose File"), FILECHOOSER_RESULTCODE);
    }
4

0 に答える 0