1

WebViewmonodroidを使用するアプリで使用されるプログレスバーの実装を表示しようとしています。私はかなり遠くまで到達しましたが、パズルの最後の部分を解決できなかったようです。有料版のMonodroidProを使用しており、テストデバイスとしてGalaxyS2を使用しています。

これが私がこれまでにしたことです:-

OnCreateセクションで:-

        Window.RequestFeature(WindowFeatures.Progress);

        SetContentView(Resource.Layout.Main);

        Window.SetFeatureInt(WindowFeatures.Progress, Window.ProgressVisibilityOn);

        wv.SetWebViewClient(new monitor());

        wv.LoadUrl("https://www.google.com");

今進行中の変更されたオーバーライドメソッドで:-

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

今私が見た解決策は非常に簡単なAndroidのJava実装のためのものです、すなわち:-

webview.setWebChromeClient(new WebChromeClient() {
    public void onProgressChanged(WebView view, int progress)   
    {
        //Make the bar disappear after URL is loaded, and changes string to Loading...
        MyActivity.setTitle("Loading...");
        MyActivity.setProgress(progress * 100); //Make the bar disappear after URL is loaded

        //Return the app name after finish loading
        if(progress == 100)
            MyActivity.setTitle(R.string.app_name);
     }
 });

ただし、monodroidを使用SetProgressすると、Androidの実装のようにメソッドを使用できません。ActivityインスタンスはOnCreateメソッドで作成できますが、Monodroidでは、まったく新しいクラスを作成してから、webchromeclient最初に継承します。私は何が欠けていますか?私が知らない別の方法はありますか?いくつかの助けを本当にいただければ幸いです。

4

1 に答える 1

2

お気づきのとおり、C#はJavaのような匿名クラスをサポートしていないため、別のクラスを定義する必要があります。Activity.SetProgress()メソッドはパブリックです。つまり、アクティビティへの参照をクラスに渡し、それを使用してメソッドを呼び出すことができます。

public class CustomWebChromeClient : WebChromeClient
{
    private Activity _context;

    public CustomWebChromeClient(Activity context)
    {
        _context = context;
    }

    public override void OnProgressChanged(WebView view, int newProgress)
    {
        base.OnProgressChanged(view, newProgress);

        _context.SetProgress(newProgress * 100);
    }
}

次に、アクティビティでこのクラスのインスタンスを作成し、それ自体をコンストラクターに渡します。

webview.SetWebChromeClient(new CustomWebChromeClient(this));

私はここで利用可能なより完全なブラウザデモを持っています。これはあなたが始めるのにも役立つかもしれません。

于 2012-05-07T11:59:45.817 に答える