首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从WebChromeClient访问活动方法

从WebChromeClient访问活动方法
EN

Stack Overflow用户
提问于 2015-06-15 16:19:32
回答 1查看 872关注 0票数 0

我正在使用Xamarin编写一个Android应用程序,在这个应用程序中,我有一个需要在创建应用程序时加载的set视图,在它完全加载之后,我会调用一些javascript到HTML页面来设置图表。

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

以下是MainActivity代码:

代码语言:javascript
复制
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类如下所示:

代码语言:javascript
复制
class myWebChromeClient : WebChromeClient
{
     public override void OnProgressChanged(WebView view, int newProgress)
     {
          base.OnProgressChanged(view, newProgress);

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

myWebChromeClientMainActivity中,但是我无法访问setUpGraph方法,即使它是一个公共方法。

任何帮助都将不胜感激!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-15 19:29:31

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

编辑

myWebChromeClient类:

代码语言:javascript
复制
class myWebChromeClient : WebChromeClient
{
     public MainActivity activity;
     public override void OnProgressChanged(WebView view, int newProgress)
     {
          base.OnProgressChanged(view, newProgress);

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

以及活动:

代码语言:javascript
复制
    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。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30850115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档