1
public class WeeklyInspection : Activity
{
  WebView view = (WebView) FindViewById(Resource.Id.inspectionWV);
  view.Settings.JavaScriptEnabled = true;
  view.Settings.CacheMode = CacheModes.CacheElseNetwork;
  view.SetWebChromeClient(new CustomWebChromeClient(this));
  view.SetWebViewClient(new CustomWebViewClient(this));
  view.LoadUrl("http://myurl.com");
}

private class CustomWebChromeClient: WebChromeClient
{
   public override void OnConsoleMessage(string message, int lineNumber, string sourceID)
    {
       if (message.StartsWith("Submit")
          //do all my submit stuff here
          //if without error, I want to go back to the Main Activity.  Have tried:
          Intent intent = new Intent(BaseContext, typeof(Main));
          StartActivity(intent); //Both BaseContext and StartActivity throw "Cannot access non-static method in static context"
          //tried:
          Finish(); //Same thing
          //tried:
          OnBackPressed(); //Same thing
    }
}
4

2 に答える 2

5

これを使うだけ

Application.Context.StartActivity(intent);
于 2016-08-04T22:26:54.023 に答える
2

発生したコンパイラ エラー メッセージが示すように、StartActivityContextのインスタンス メソッドであり、静的メソッドではないため、そのように呼び出すことはできません。

コード サンプルには含めていませんが、アクティビティでは、"this" (アクティビティ) を CustomWebChromeClient のコンストラクタに渡しているため、CustomWebChromeClient はそれへの参照を保持していると想定しています。その参照を使用して、アクティビティで必要なインスタンス メソッドを呼び出すことができます。これは、StartActivity、Finish、またはその他の必要なものであってもかまいません。例えば:

private class CustomWebChromeClient: WebChromeClient
{
    private readonly Activity _context;

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

    public override void OnConsoleMessage(string message, int lineNumber, string sourceID)
    {
        if (message.StartsWith("Submit"))
        {
            _context.Finish();
        }
    }
}
于 2012-06-18T20:25:12.610 に答える