使用findAllAsync()和findNext(true)搜索WebView;

时间:2014-06-12 10:47:34

标签: search webview

我正在尝试在我的webView中搜索单词。这是我的搜索方法:

public void filterWebView(String query){

if (query != null) {
    mQuery = query;
    mWebView.setWebViewClient(new WebViewClient() {

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

            if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {

                view.findNext(true);
                int c = view.findAll(mQuery);
                try {
                    Method method = WebView.class.getMethod("setFindIsUp", Boolean.TYPE);
                    method.invoke(view, true);
                } catch (Throwable ignored) {}

            } else {
                view.findAllAsync(mQuery);
                view.findNext(true);

                try {
                    Method method = WebView.class.getMethod("setFindIsUp", Boolean.TYPE);
                    method.invoke(view, true);
                } catch (Throwable ignored) {}
            }
        }
    });
    mWebView.loadUrl(mDocUrl);
}}

它适用于API版本&lt; 16,但对于API 16和&gt; 16,此方法查找所有单词,但findNext()不起作用。

如果我在API&lt; 16中设置查询并调用此方法10次,则会获得下一个结果(如果存在),但每次突出显示相同的单词时,在API&gt; 16中。

我的方法的第二部分有什么问题,在其他之后{... ???

1 个答案:

答案 0 :(得分:0)

请参阅WebView.findNext的文档:http://developer.android.com/reference/android/webkit/WebView.html#findNext(boolean)

特别是,如果你在findAllAsync之前调用findNext,它将什么都不做。另请注意,findAllAsync异步执行,因此您可能希望在WebView上注册FindListener以获取结果。 (见http://developer.android.com/reference/android/webkit/WebView.html#setFindListener(android.webkit.WebView.FindListener)