いくつかの練習の後、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);
}