![](/img/trans.png)
[英]UWP Xamarin C# - WebView go back navigation return page expired
[英]Webview wont go back(Xamarin - Android C#)
我在這里只是為了讓大家知道。
我開始為Android開發一個Webview應用程序,我希望允許用戶能夠返回上一頁,而不是笨拙地退出該應用程序。
我在運行應用程序並按后退圖標時收到此運行時錯誤。
“ System.NullReferenceException:對象引用未設置為對象的實例”
對於以下代碼塊:
public override bool OnKeyDown(Keycode keyCode, KeyEvent e)
{
if (keyCode == Keycode.Back && web_view.CanGoBack()) // <-- this is the line which brings up the error
{
web_view.GoBack();
return true;
}
return base.OnKeyDown(keyCode, e);
}
我懷疑它與WebView有關。
誰能給我一些有關如何進行的建議?
以下是我的小項目的源代碼:
using System;
using Android.App;
using Android.OS;
using Android.Webkit;
using Android.Views;
namespace MyWebApp
{
[Activity(Label = "MyWebApp", MainLauncher = true, Icon = "@drawable/icon", Theme = "@android:style/Theme.NoTitleBar")]
public class MainActivity : Activity
{
WebView web_view; //<-- I think this might be the issue?
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.Main);
DisplayWebpage(web_view, "http.google.com");
}
private WebView DisplayWebpage(WebView webview, String url)
{
webview = FindViewById<WebView>(Resource.Id.webView);
webview.Settings.JavaScriptEnabled = true;
webview.LoadUrl(url);
webview.SetWebViewClient(new WebView_Client());
return webview;
}
public class WebView_Client : WebViewClient
{
public override bool ShouldOverrideUrlLoading(WebView view, string url)
{
view.LoadUrl(url);
return true;
}
}
// BACK FUNCTIONALITY
public override bool OnKeyDown(Keycode keyCode, KeyEvent e)
{
if (keyCode == Keycode.Back && web_view.CanGoBack())
{
web_view.GoBack();
return true;
}
return base.OnKeyDown(keyCode, e);
}
}
}
您沒有在DisplayWebpage
方法的返回中分配WebView實例(web_view):
web_view = DisplayWebpage(web_view, "http.google.com");
然后,您應該能夠:
public override bool OnKeyDown(Keycode keyCode, KeyEvent e)
{
if (keyCode == Keycode.Back && web_view != null) {
try {
if (web_view.CanGoBack()) {
Log.Debug ("StackOverflow", "Allow browser back");
Toast.MakeText (this, "Allow browser back", ToastLength.Short).Show();
web_view.GoBack ();
return true;
}
}
catch (Exception ex) {
Log.Error ("StackOverflow", ex.Message);
}
} else {
Log.Error ("StackOverflow", "Null webview...");
}
Log.Debug ("StackOverflow", "Back button blocked");
Toast.MakeText (this, "Back button blocked", ToastLength.Short).Show ();
return false;
}
web_view.GoBack();
我認為您的問題就在這里,您可以在將值放入內部或執行new()之前使用它。 如果要將舊的webview保存在web_view中。 您應該在某處做類似web_view = webview
。 然后做web_view.GoBack()
如果要返回WebView中的一兩個頁面,可以使用WebView.GoBack()
或WebView.GoBackOrForward(int steps)
方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.