繁体   English   中英

从WebChromeClient访问活动方法

[英]Accessing Activity Methods from WebChromeClient

我正在使用Xamarin编写一个Android应用程序,在该应用程序中,我有一个Web视图需要在创建应用程序时加载,并且在完全加载后,我会在HTML页面中调用一些JavaScript来设置图表。

我正在尝试使用自定义WebChromeClient覆盖OnProgressChanged方法,当该方法完全加载时,它将在MainActivity调用一个方法。

这是MainActivity代码:

using System;
using System.Text;
using System.Timers;
using System.Collections;
using Android.App;
using Android.Content;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;
using Android.Text;
using Android.Text.Style;
using Android.Webkit;

public class MainActivity : Activity
{
     WebView graph;

     protected override void OnCreate (Bundle bundle)
     {
          base.OnCreate (bundle);
          SetContentView (Resource.Layout.Main);

          graph = FindViewById<WebView>(Resource.Id.webGraph);

          //Initializes the WebView
          graph.SetWebChromeClient(new myWebChromeClient()); 
          graph.Settings.JavaScriptEnabled = true;
          graph.LoadUrl("file:///android_asset/graph.html");

我创建的myWebChromeClient类如下所示:

class myWebChromeClient : WebChromeClient
{
     public override void OnProgressChanged(WebView view, int newProgress)
     {
          base.OnProgressChanged(view, newProgress);

          if (newProgress == 100) {MainActivity.setUpGraph();}
     }
}

myWebChromeClient位于MainActivity ,但是即使它是公共方法,我也无法访问setUpGraph方法。

任何帮助将不胜感激!

在myWebChromeClient类中接受并存储MainActivity类型的引用。 只有这样,您才能在MainActivity中调用setUpGraph()函数。

编辑

myWebChromeClient类:

class myWebChromeClient : WebChromeClient
{
     public MainActivity activity;
     public override void OnProgressChanged(WebView view, int newProgress)
     {
          base.OnProgressChanged(view, newProgress);

          if (newProgress == 100) { activity.setUpGraph(); }
     }
}

和活动:

    public class MainActivity : Activity
    {
         WebView graph;

         protected override void OnCreate (Bundle bundle)
         {
              base.OnCreate (bundle);
          SetContentView (Resource.Layout.Main);

          graph = FindViewById<WebView>(Resource.Id.webGraph);

          //Initializes the WebView
          myWebChromeClient client = new myWebChromeClient(); 
          client.activity = this;
          graph.SetWebChromeClient(client); 
          graph.Settings.JavaScriptEnabled = true;
          graph.LoadUrl("file:///android_asset/graph.html");

为了简单起见,我向客户端添加了一个公共变量,请不要在生产中使用相同的变量。 在构造函数中传递引用或使用get-set。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM