【问题标题】:Calling MainActivity function from inside shouldOverrideUrlLoading从里面调用 MainActivity 函数 shouldOverrideUrlLoading
【发布时间】:2013-12-24 04:05:29
【问题描述】:

简单的问题,我如何从 shouldOverrideUrlLoading 内部调用函数/方法? 我正在寻找像 Qt 的 Signal and Slots 这样的东西,这样我就可以绕过那个 OO-Can-Not-See-Your-Parent-Jail。遗憾的是,使用静态不是一种选择,因为那时我无法再从该静态访问 UI。并且将我想要访问的 UI 元素设置为静态元素也不起作用,因为 Android API 一直在更改这些元素,从而使静态表示无效。

这就是我现在拥有的:

public class MainActivity extends Activity
{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        WebView wv = (WebView) this.findViewById(R.id.webView);

        wv.setWebViewClient(new WebViewClient()  {
            @Override
            public boolean shouldOverrideUrlLoading(WebView wv, String url) 
            {
                //TODO: Call doUrlHandling somehow...
                //wv.loadData("URL:" + url, "text/html", "UTF-8");
                return true;
            }
        });

    wv.loadUrl("file:///android_asset/startup.html");
    }

    public void doUrlHandling(String url)
    { }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) 
    {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }   
}

【问题讨论】:

    标签: android webview


    【解决方案1】:

    您可以保存您的活动/上下文的句柄:

      public class MainActivity extends Activity
        {
    
         private MainActivity mActivity;
    
         @Override
         protected void onCreate(Bundle savedInstanceState) 
         {
            super.onCreate(savedInstanceState);
    
            mActivity = this;                          // Save handle here
    
            setContentView(R.layout.activity_main);
        .
        .
        .
    
            wv.setWebViewClient(new WebViewClient()  {
                @Override
                public boolean shouldOverrideUrlLoading(WebView wv, String url) 
                {
    
                    mActivity.doUrlLoading(url);        // call method of MainActivity
    
                    return true;
                }
            });
    
        .
        .
        .
    

    或通过以下方式从您的内部类中引用该函数:

    MainActivity.this.doUrlLoading(url);
    

    请参阅 Meaning of .this and .class in java 以获得有关此语法的详细说明

    【讨论】:

    • 谢谢 :) 没有任何解释,我查找的每个示例都只是填满了日志并且从不尝试离开该功能。
    猜你喜欢
    • 2019-01-05
    • 1970-01-01
    • 1970-01-01
    • 2017-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多