从 WebChromeClient 访问 Activity 方法
Accessing Activity Methods from WebChromeClient
我正在使用 Xamarin 编写一个 Android 应用程序,在那个应用程序中,我有一个 webview 需要在创建应用程序时加载,在它完全加载后,我调用一些 javascript 进入 HTML 页面以设置图形。
我正在尝试使用自定义 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 看起来像这样:
class myWebChromeClient : WebChromeClient
{
public override void OnProgressChanged(WebView view, int newProgress)
{
base.OnProgressChanged(view, newProgress);
if (newProgress == 100) {MainActivity.setUpGraph();}
}
}
myWebChromeClient
在 MainActivity
中,但我无法访问 setUpGraph
方法,即使它是 public 方法。
任何帮助将不胜感激!
接受 MainActivity 类型的引用并将其存储在 myWebChromeClient class 中。
然后才能调用MainActivity中的setUpGraph()函数。
编辑
myWebChromeClient class:
class myWebChromeClient : WebChromeClient
{
public MainActivity activity;
public override void OnProgressChanged(WebView view, int newProgress)
{
base.OnProgressChanged(view, newProgress);
if (newProgress == 100) { activity.setUpGraph(); }
}
}
和activity:
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");
为了简单起见,我在客户端添加了一个 public 变量,请不要在生产中使用相同的变量。在构造函数中传递引用或使用 get-set。
我正在使用 Xamarin 编写一个 Android 应用程序,在那个应用程序中,我有一个 webview 需要在创建应用程序时加载,在它完全加载后,我调用一些 javascript 进入 HTML 页面以设置图形。
我正在尝试使用自定义 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 看起来像这样:
class myWebChromeClient : WebChromeClient
{
public override void OnProgressChanged(WebView view, int newProgress)
{
base.OnProgressChanged(view, newProgress);
if (newProgress == 100) {MainActivity.setUpGraph();}
}
}
myWebChromeClient
在 MainActivity
中,但我无法访问 setUpGraph
方法,即使它是 public 方法。
任何帮助将不胜感激!
接受 MainActivity 类型的引用并将其存储在 myWebChromeClient class 中。 然后才能调用MainActivity中的setUpGraph()函数。
编辑
myWebChromeClient class:
class myWebChromeClient : WebChromeClient
{
public MainActivity activity;
public override void OnProgressChanged(WebView view, int newProgress)
{
base.OnProgressChanged(view, newProgress);
if (newProgress == 100) { activity.setUpGraph(); }
}
}
和activity:
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");
为了简单起见,我在客户端添加了一个 public 变量,请不要在生产中使用相同的变量。在构造函数中传递引用或使用 get-set。