2015-06-15 80 views
0

我正在使用Xamarin編寫一個Android應用程序,並且在該應用程序中,我有一個需要在創建應用程序時加載的webview,並且在完全加載後,我將一些javascript調用到HTML頁面來設置圖形。從WebChromeClient訪問活動方法

我試圖使用自定義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();} 
    } 
} 

myWebChromeClientMainActivity內,但我無法訪問setUpGraph方法即使它是一種公開的方法。

任何幫助將不勝感激!

+0

MainActivity.setUpGraph() - 這是一個靜態方法嗎?如果不是,則需要在MainActivity的實例上調用它,而不是類本身。 – Jason

+0

它不是靜態的,並且接收特定於MainActivity類的參數。我如何訪問MainActivity的實例並且它是當前正在運行的成員? –

回答

0

在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。

+0

我該怎麼做呢? –

+0

@ChristopherBarrow檢查編輯。 – manishKungwani

+0

謝謝!這解決了它。 –