【问题标题】:Webview wont go back(Xamarin - Android C#)Webview 不会返回(Xamarin - Android C#)
【发布时间】:2015-12-10 16:00:39
【问题描述】:

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

我开始为 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);
    }
}
}

【问题讨论】:

    标签: c# android webview xamarin


    【解决方案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;
    } 
    

    【讨论】:

      【解决方案2】:
      web_view.GoBack();  
      

      我认为你的问题就在这里,你使用它之前将你的价值放入里面或之前做一个 new()。如果您想将旧的 webview 保存在 web_view 中。你应该在之前的某个地方做类似web_view = webview 的事情。然后web_view.GoBack()

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2016-03-22
          • 2019-03-10
          • 1970-01-01
          • 2019-01-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-17
          相关资源
          最近更新 更多