どのように私は私のアプリは、WebViewの中でクリックしたリンクのURLを取得するために取得することができ、その上で操作を実行し、それを読み込みますか?

Tanay Neotia:

私は、私は(私は基本的にスタックオーバーフロー:)であなたを通して素晴らしい男とギャルのすべてを行う方法を学んでいる)のAndroidには何もコーディングでの絶対のnoobだと言って、これを前置きするつもりです。私は完全にだけWebViewのコンポーネントでアプリを作っていると私はそれがWebViewのページのリンクがクリックされたとき、検出しそのリンクのURLを取得し、元のリンクがある場合は別のリンクにユーザーをリダイレクトしますその中の特定の文字列。最後に、WebViewのは、元のリンクまたはリダイレクトリンクのいずれかで再ロードする必要があります。

ここで私は、エラーが起こっていると思うアプリのJava側のための私のコードは次のとおりです。

public class Grades extends AppCompatActivity {

    private WebView webview;
    String ShowOrHideWebViewInitialUse = "show";
    private ProgressBar spinner;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_grades);

        webview =(WebView)findViewById(R.id.webView);
        spinner = (ProgressBar)findViewById(R.id.progressBar1);
        webview.setWebViewClient(new CustomWebViewClient());

        webview.getSettings().setJavaScriptEnabled(true);
        webview.getSettings().setDomStorageEnabled(true);
        webview.setOverScrollMode(WebView.OVER_SCROLL_NEVER);
        webview.loadUrl("myurl.com");
    }
    // This allows for a splash screen
    // (and hide elements once the page loads)
    private class CustomWebViewClient extends WebViewClient {
        @Override
        public void onPageStarted(WebView webview, String url, Bitmap favicon) {
            // only make it invisible the FIRST time the app is run
            if (ShowOrHideWebViewInitialUse.equals("show")) {
                webview.setVisibility(webview.INVISIBLE);
            }
        }

        @Override
        public void onPageFinished(WebView view, String url) {

            spinner.setVisibility(View.GONE);
            ShowOrHideWebViewInitialUse = "hide";
            view.setVisibility(webview.VISIBLE);
            super.onPageFinished(view, url);
        }

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            if (url.contains("/courses/")) {
                url = url + "/grades"
                WebView.loadUrl(url);
                return false;
            } else {
                WebView.loadUrl(url)
            }

        }
    }
}

私はアプリが最後@OverrideでlogcatにURLを表示作らいくつかのトラブルシューティングと追加されたコードをしました。問題は、代わりのURLを印刷することのlogcatでちょうど無限ループがあった、WebViewのは、ページをロードしなかったことがあった現在のWebViewのないURLのページをリンクだから、私には私の問題が二つあるようだと私は何をすべきか見当がつかない。

情報について:真ん中の2つの@overridesだけでアプリが起動時にメインページのロード中にスピナーを表示するためのものです。すべてが最後@Overrideまでの作業罰金に思えます。

Tanay Neotia:

私はそれを考え出した。最後のオーバーライドは、次のようになります。

@Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        System.out.println(Uri.parse(url).getHost());
        if ("myurl.com".equals(Uri.parse(url).getHost())) {
            webview.loadUrl(url);
            String newurl = webview.getUrl();
            System.out.println(newurl);
            if (newurl.contains("/grades") || newurl.contains("/users") || newurl.contains("/assignments")) {
                webview.loadUrl(newurl);
                return false;
            }
            if (newurl.contains("myurl.com") && newurl.contains("/grades") == false && newurl.contains("/users") == false && newurl.contains("/assignments") == false) {
                newurl = newurl + "/grades";
                System.out.println(newurl);
                webview.loadUrl(newurl);
                return false;
            }
            return false;
        }
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
        startActivity(intent);
        return true;
    }

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=362808&siteId=1