【问题标题】:Linking webview with another activity将 webview 与另一个活动链接
【发布时间】:2016-06-14 05:43:38
【问题描述】:

我的问题是我在 webview 中创建的链接不起作用,然后当我单击它时,它不会转到另一个 Activity,那么我的错误在哪里? 请帮忙!!!谢谢

prknln1.loadDataWithBaseURL("file:///android_asset",Perkenalan,"text/html","utf-8",null);
        prknln1.setWebViewClient(new WebViewClient() {
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                Intent i;
                {
                    if (url.equalsIgnoreCase("TabHiragana")) {
                        i = new Intent(getApplicationContext(), TabHiragana.class);
                        startActivity(i);
                    } else if (url.equalsIgnoreCase("TabKatakana")) {
                        i = new Intent(getApplicationContext(), TabKatakana.class);
                        startActivity(i);
                    } else if (url.equalsIgnoreCase("Kanji")) {
                        i = new Intent(getApplicationContext(), List_Kanji.class);
                        startActivity(i);
                    }
                }
                Log.e("URL", "URL" + url);
                return true;
            }
        });

【问题讨论】:

  • 你的问题不清楚
  • 我在 webview 中创建指向另一个活动的链接,当我使用 loadData 时它可以工作,但是当我将其更改为 loadDataWithBaseURL 时它不起作用,并且没有错误警告。那么我的代码问题出在哪里...谢谢
  • 点击 webView 中的链接时,您在日志中的 Log.e("URL", "URL" + url); 中得到了什么?
  • 对不起,我没有在模拟器上运行它,而是在我的手机上运行它,所以我不知道我在日志中得到了什么。但是现在我的问题已经解决了,我只用包含更改equalsIgnoreCase。谢谢你的时间...... :)

标签: android android-activity webview hyperlink


【解决方案1】:

我认为您将检查 url 中的特定单词,为此您需要使用 contains 方法。

prknln1.loadDataWithBaseURL("file:///android_asset",Perkenalan,"text/html","utf-8",null);
        prknln1.setWebViewClient(new WebViewClient() {
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                Intent i;
                {
                    if (url.contains("TabHiragana")) {
                        i = new Intent(getApplicationContext(), TabHiragana.class);
                        startActivity(i);
                    } else if (url.contains("TabKatakana")) {
                        i = new Intent(getApplicationContext(), TabKatakana.class);
                        startActivity(i);
                    } else if (url.contains("Kanji")) {
                        i = new Intent(getApplicationContext(), List_Kanji.class);
                        startActivity(i);
                    }
                }
                Log.e("URL", "URL" + url);
                return true;
            }
        });

【讨论】:

  • 我会尝试,但是当我仅在第一行使用 loadData 时它可以工作,但是当我使用 loadDataWithBaseURL 为什么它不起作用?你能解释一下吗...谢谢库马尔先生
  • 使用 loadData(String data, String mimeType, String encoding) 我们无法指定基本 url,但是使用 loadDataWithBaseURL(String baseUrl, String data, String mimeType, String encoding, String historyUrl)我们可以指定基本 url。例如资产文件夹的路径。
  • yeayyy !!!......它的工作原理。谢谢,但是 contains 和 equalsIgnoreCase 有什么区别?
  • contains 将检查该特定字符串是否存在(它可能是字符串的一部分),但 equalsIgnoreCase 将尝试通过忽略大小写来匹配完整的字符串。
  • contains() 检查一个字符串是否包含另一个字符串,而 equalsIgnoreCase() 检查两个字符串是否相等。那是你的问题
【解决方案2】:

打开一个活动并向它传递一个参数:

在您的文本数据 (myText) 中,有 url:

"<a href=\"" + word + "\">" + word + "</a>"

加载数据:

webView.loadDataWithBaseURL("file:///android_asset", myText, "text/html", "utf-8", null);

setWebViewClient:

        webView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                if (url.startsWith("file")) {
                    Intent intent = new Intent(MyActivity.this, MyActivity.class);
                    intent.putExtra("word", Uri.parse(url).getLastPathSegment());
                    startActivity(intent);
                    return true;
                } else
                    return false;
            }
        });

【讨论】:

    猜你喜欢
    • 2017-09-30
    • 1970-01-01
    • 1970-01-01
    • 2014-07-14
    • 2013-05-14
    • 1970-01-01
    • 2014-01-27
    • 1970-01-01
    • 2013-04-02
    相关资源
    最近更新 更多