【问题标题】:show url in searchview android在searchview android中显示url
【发布时间】:2016-12-20 10:50:02
【问题描述】:

我想在SearchView 菜单项中显示WebView 的当前URL。 我知道要获取URL,我需要使用WebView方法getUrl(),但是搜索查询后不知道如何显示。

这是我的代码:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.menu_main, menu);

    MenuItem searchItem =  menu.findItem(R.id.action_search);

    final SearchView searchView = (SearchView)searchItem.getActionView();
    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {
            String url = "https://www.google.com/search?q="+query;
            PlaceholderFragment.mWebView.loadUrl(url);
            searchView.clearFocus();
            return true;
        }

        @Override
        public boolean onQueryTextChange(String newText) {
            return false;
        }
    });
    return true;
}

另外,如何添加复制和粘贴此 URL 的功能?

【问题讨论】:

  • 你能详细说明一下你的要求吗?“但我不知道,如何在搜索查询后显示它”你的意思是在用户搜索某些内容之后。你必须显示那个 url 吗?
  • 隐藏您的搜索视图并显示带有 url 的文本视图
  • @Charuka,对不起我的英语不好。是的,我的意思是“在用户搜索某些内容后,您必须显示该网址”
  • 两种方式。 1.在搜索视图中显示 2.使用另一个视图显示数据..你喜欢什么?如果您想在搜索视图上设置它...。设置 searchView 文本,您可以选择提交搜索该词或不使用布尔参数 ,,searchView.setQuery(searchToken, false); // true 或 false 表示您需要搜索它或只显示
  • 你可以在onQueryTextSubmit方法中使用searchView.setQuery(url, false);

标签: android search webview searchview


【解决方案1】:

你能用这样的东西吗?您将在shouldOverrideUrlLoading 方法中获得用户更改的网址

PlaceholderFragment.mWebView.setWebViewClient(new WebViewClient(){
    @Override
    public boolean shouldOverrideUrlLoading(WebView wView, String url)
    {
       searchView.setQuery(url, false);
        wView.loadUrl(url);
        return true;
    }
});
final SearchView searchView = (SearchView)searchItem.getActionView();
    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {
            String url = "https://www.google.com/search?q="+query;
            PlaceholderFragment.mWebView.loadUrl(url);
            searchView.clearFocus();
            return true;
        }

        @Override
        public boolean onQueryTextChange(String newText) {
            return false;
        }
    });

如果有什么问题,现在就告诉我

更新

 @Override
    public boolean onCreateOptionsMenu(Menu menu) {
     getMenuInflater().inflate(R.menu.menu, menu);
            searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();

        int id = searchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null);
        EditText editText = (EditText) searchView.findViewById(id);
}

菜单xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/action_search"
        android:actionLayout="@layout/my_search_view"
        android:actionViewClass="android.widget.SearchView"
        android:icon="@android:drawable/ic_menu_search"
        android:showAsAction="always"
        android:title="Search" />
</menu>

现在,您可以使用该编辑文本。这只是对 searchview 的破解......

现在您可以通过点击searchView 来执行selectAll

editText.selectAll();

【讨论】:

  • 我应该在 onQueryTextSubmit() 方法中使用这个方法来加载查询,我会放吗?我还在此活动中覆盖了 shouldOverrideUrlLoading(WebView wView, String url) 方法
  • 不需要你可以放在onQueryTextSubmit()方法之外,只需添加代码
  • 非常感谢!它工作完美。请帮我做一件小事:我想通过单击它来选择searchview中的所有文本(在edittext中我可以使用allselect()方法,我可以在searchview中使用什么?
  • 在 SearchView 实例初始化后,我也在 onCreateOptionsMenu() 中使用了您的代码,但它给了我 NullPointerException()。
  • 我有空指针,因为我没有为 searchview 设置监听器。我添加 'searchView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { editText.selectAll(); } });' ,但没有任何反应 - 我无法在 searchview 中选择所有文本(我的 url)。 P.S:我不认为,这个问题出在自己的 searchview 布局中(也许,我错了)
【解决方案2】:

一旦用户点击searchView 删除其中的所有文本(如果有)检查this

开始加载用户在您的webView中搜索的详细信息

在您的网络视图中使用监听器,并在每次开始加载网络视图以进行新搜索后调用它

这里我添加了所有你需要知道但不需要全部使用的覆盖方法..

如果你想直到页面加载,你可以显示加载.. 看看 cmets

boolean loadingFinished = true;
boolean redirect = false;

    mWebView.setWebViewClient(new WebViewClient() {

    @Override
    public boolean shouldOverrideUrlLoading(
            WebView view, WebResourceRequest request) {
        if (!loadingFinished) {
           redirect = true;
        }

        loadingFinished = false;
        webView.loadUrl(request.getUrl().toString());
        return true;
    }

    @Override
    public void onPageStarted(
            WebView view, String url, Bitmap favicon) {
        super.onPageStarted(view, url, favicon);
        loadingFinished = false;
        //SHOW LOADING IF IT ISNT ALREADY VISIBLE  
    }

    @Override
    public void onPageFinished(WebView view, String url) {
        if(!redirect){
           loadingFinished = true;
        }

        if(loadingFinished && !redirect){
            //HIDE LOADING IT HAS FINISHED
        } else{
            redirect = false; 
        }
    }
});

现在在searchView 中找到您想要向用户显示数据的最佳位置,例如:当页面刚开始加载时,当它完全加载时

然后在选定的覆盖方法中使用searchView.setQuery(url, false); 设置它,例如:在onPageFinished

【讨论】:

  • 感谢您的回答,但我使用了 Mayur Ra​​val 的解决方案
猜你喜欢
  • 2018-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-15
  • 2013-06-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多