Android WebView findAll无法按预期工作

时间:2013-12-12 03:05:07

标签: android android-fragments webview

我有一个像这样的webview片段类:

public class WebviewFragment extends Fragment {

private WebView mWebView;
private String mFile;
private EditText mSearch;
private int mOccurrence;
private String mKeyword;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    View root = inflater.inflate(R.layout.webview_fragment, container, false);

    mSearch = (EditText) getActivity().findViewById(R.id.search_bar_edit_text);
    mSearch.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
        }

        @Override
        public void afterTextChanged(Editable s) {
            fulltextSearch(s.toString());
        }
    });

    mWebView = (WebView) root.findViewById(R.id.webview);
    mWebView.loadUrl(mFile);
    mWebView.getSettings().setDefaultTextEncodingName("utf-8");
    mWebView.requestFocus();
    mWebView.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            return super.shouldOverrideUrlLoading(view, url);
        }
    });

    return root;
}

@Override
public void onStart() {
    super.onStart();

    if (mOccurrence >= 0 && mKeyword != null) {
        scrollTo(mOccurrence, mKeyword);
    }
}

private void scrollTo(int occurrence, String keyword) {
    fulltextSearch(keyword);

    for (int i = occurrence; i >= 0; i--) {
        mWebView.findNext(true);
    }
}

public void fulltextSearch(String text) {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
        mWebView.findAll(text);
    }
    else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
        mWebView.findAllAsync(text);
    }
}

public void findPrev() {
    mWebView.findNext(false);
}

public void findNext() {
    mWebView.findNext(true);
}

当我点击EditText(mSearch)时,它的工作正常。它显示出现的颜色输出。我需要的是滚动到已定义的关键字出现。当我从scrollTo调用方法时,问题就开始了。它没有显示,没有任何反应。通过调试,我知道,theese函数实际上是调用的,没有任何结果的芽...没有任何反应。我究竟做错了什么?或者这是一个错误?

如果有更好的方法滚动到特定的出现,我会感激不尽。

2 个答案:

答案 0 :(得分:1)

这是示例尝试这可能是使用完整

Find text in webview useing findall method

答案 1 :(得分:0)

寻找其他人的解决方案。如何修改onStart()方法:

@Override
public void onStart() {
    super.onStart();

    mWebView.setWebViewClient(new WebViewClient() {
        @Override
        public void onPageFinished(WebView view, String url) {

            if (mOccurrence >= 0 && mKeyword != null) {
                scrollTo(mOccurrence, mKeyword);
            }
        }
    });
}