【问题标题】:want to redirect webview to other intent when url loading has finished in webview android想要在 webview android 中完成 url 加载后将 webview 重定向到其他意图
【发布时间】:2015-03-06 09:41:53
【问题描述】:

当 url 加载完成时,我想将 webview 重定向到另一个活动 完全的。这是我的 webview 代码:- 此类由 webview 扩展

   **   1)  This the method where I am doing code for redirecting webview to activity**

> 这是加载 url 的 onPagefinished 方法。

            public void onPageFinished(WebView view, String url) {
                if (url.endsWith("paymentconfirmation/"))
                    ((DibsPaymentScreen) getContext())
                            .setCancelDisallowed(false);
                if (callbackUrl.equals(url)
                        && statusCancelled.equals(paymentData.params
                                .get(statusKey))) {
                    paymentResultListener.cancelUrlLoaded();
                } else if (callbackUrl.equals(url)
                        && statusAccepted.equals(paymentData.params
                                .get(statusKey))) {
                    paymentResultListener.paymentAccepted(paymentData.params);

                } else if (!windowIsLoaded) {
                    paymentWindowLoaded();

                }

                super.onPageFinished(view, url);
            }

                        public boolean shouldOverrideUrlLoading(WebView view, String url) {

                            if (url.equals("http://nmotion.dk/paymentconfirmation/")) {
                                Intent intent = new Intent(getContext(),
                                RestaurantsListScreen.class);
                            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                        getContext().startActivity(intent);
                                return true;
                            }
                            return false;
}

【问题讨论】:

  • 你搜索了吗?显示代码。
  • @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if (url.equals("nmotion.dk/paymentconfirmation/")) { Intent intent = new Intent(getContext(), RestaurantsListScreen.class); intent .setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); getContext().startActivity(intent); view.destroy(); return true; } return false; }
  • 我已经把代码贴在这里了

标签: android android-intent android-activity webview


【解决方案1】:

您必须在 WebView WebViewCLient 中实现完成加载程序

webview.setWebViewClient(new WebViewClient(){
    @Override
    public void onPageFinished(WebView view, String url) {
        // create your intent here
        super.onPageFinished(view, url);
    }
});

编辑了提供的代码

public void onPageFinished(WebView view, String url) {
   if (url.equals("http://nmotion.dk/paymentconfirmation/")) {

       Intent intent = new Intent(getContext(), RestaurantsListScreen.class);
       intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
       getContext().startActivity(intent);

       return true;

   } else {
            if (url.endsWith("paymentconfirmation/")){
                ((DibsPaymentScreen) getContext()).setCancelDisallowed(false);
            }
            if (callbackUrl.equals(url) && statusCancelled.equals(paymentData.params.get(statusKey))) {
                paymentResultListener.cancelUrlLoaded();

            } else if (callbackUrl.equals(url)

               && statusAccepted.equals(paymentData.params.get(statusKey))) {
                paymentResultListener.paymentAccepted(paymentData.params);

            } else if (!windowIsLoaded) {
                paymentWindowLoaded();

            }

            super.onPageFinished(view, url);

    }

}

【讨论】:

  • 你必须在 OnPageFinished 中移动意图(如果 (url.equals("nmotion.dk/paymentconfirmation/")) 在那里检查),因为 shouldOverrideUrlLoading 阻止 webview 加载 url(它在加载之前被触发)
【解决方案2】:

试试这个

webView.setWebViewClient(new WebViewClient() {
    public void onPageFinished(WebView view, String url) {
         if (url.endsWith("paymentconfirmation/"))
                ((DibsPaymentScreen) getContext())
                        .setCancelDisallowed(false);
            if (callbackUrl.equals(url)
                    && statusCancelled.equals(paymentData.params
                            .get(statusKey))) {
                paymentResultListener.cancelUrlLoaded();
            } else if (callbackUrl.equals(url)
                    && statusAccepted.equals(paymentData.params
                            .get(statusKey))) {
                paymentResultListener.paymentAccepted(paymentData.params);

            } else if (!windowIsLoaded) {
                paymentWindowLoaded();
            }

            if (url.equals("http://nmotion.dk/paymentconfirmation/")) {
                            Intent intent = new Intent(getContext(),
                            RestaurantsListScreen.class);
                        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    getContext().startActivity(intent);
                   }

            super.onPageFinished(view, url);
    }
});

【讨论】:

  • 在完成方法中我的其他工作正在进行中。
  • 为什么不应该在 "super.onPageFinished(view, url);" 之前调用 "if (url.equals("nmotion.dk/paymentconfirmation/")) { .... } "
  • 与您的代码建议和 ryoghurt 代码建议。
  • super.onPageFinished(view, url); 始终是方法的第一行。
猜你喜欢
  • 2013-09-12
  • 2017-06-27
  • 2012-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-17
  • 1970-01-01
  • 2019-08-22
相关资源
最近更新 更多