Webview不会回去(Xamarin - Android C#)

时间:2015-12-10 16:00:40

标签: c# android webview xamarin

我是新来的,只是为了让大家都知道。

我开始为Android制作一个webview应用程序,我想让用户能够回到上一页而不是alwasy离开应用程序。

每当我运行应用程序并按下后退图标时,我都会收到此运行时错误。

  

“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);
    }
}
}

3 个答案:

答案 0 :(得分:1)

您没有在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;
} 

答案 1 :(得分:0)

web_view.GoBack();  

我认为你的问题就在这里,你之前使用它来把你的价值放在里面或之前做一个新的()。如果要在web_view中保存旧的webview。你之前应该在某处做web_view = webview之类的事情。然后执行web_view.GoBack()

答案 2 :(得分:0)

如果您想在WebView中返回一两页,可以使用WebView.GoBack()WebView.GoBackOrForward(int steps)方法。