【问题标题】:Android Load URL with string from SearchViewAndroid 使用 SearchView 中的字符串加载 URL
【发布时间】:2016-10-09 21:06:19
【问题描述】:

我已经使用 Android Studio 创建了一个 WebView 应用,但我想在导航抽屉中添加搜索功能,如果失败,则添加到操作栏。

我已添加:

<SearchView
    android:id="@+id/Custom_Search"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

通过 app_bar_main.xml 到操作栏,我在前端看到它,但这是我不能再进一步的地方,因为我是一个完整的应用程序新手。

我想要的是输入到搜索框中的字符串来加载我网站的搜索 URL。

例如webView.loadUrl("http://www.example.com/result/?q=*search_string*");

我花了 5 个多小时试图弄清楚这一点,并研究在没有运气的情况下该怎么做。我发现了类似的问题,但没有任何答案。如果他们不愿意提供完整的答案,我希望有人能指出我正确的方向。谢谢

【问题讨论】:

  • 由于该网站是一个非营利组织,我不希望自己花钱请人来实现它。所以你希望这里的人会实现这个你。很抱歉,SO 不是为了这个,您可以尝试自己实现该应用,如果您遇到技术问题,人们会很乐意帮助您。
  • 谢谢你。我花了很多时间试图解决这个问题,这是我最后的手段。我自己已经帮助很多人解决了 PHP 问题,当我所做的只是帮助其他人完成这个项目时,我不会阻止其他人像你一样帮助我的帖子。
  • 如果您尝试数小时来解决这个问题,为什么不显示您尝试过的代码,以便人们可以更好地帮助您。我很抱歉,但公式:“我有这个,我想要那个”行不通,永远行不通。无论如何,祝你的项目好运,我删除了反对票,但我认为你应该展示你的尝试。

标签: android android-studio webview searchview


【解决方案1】:

经过很多天的尝试,我已经设法让它工作(ish)

要加载带有搜索字符串的 URL,您需要这样做:

MainActivity.Java

@Override
    public boolean onCreateOptionsMenu(Menu menu) {

        getMenuInflater().inflate(R.menu.main, menu);

        SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
        SearchManager searchManager = (SearchManager) getSystemService(SEARCH_SERVICE);
        searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
        Intent searchIntent = getIntent();
        String query = searchIntent.getStringExtra(SearchManager.QUERY);
        if(Intent.ACTION_SEARCH.equals(searchIntent.getAction())) {

            mwebView.loadUrl("http://example.co.uk/result/?q="+query);

        }

        return super.onCreateOptionsMenu(menu);
    }

main.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">


    <item
        android:id="@+id/menu_search"
        android:title="search"
        android:icon="@drawable/ic_search_black_24dp"
        app:showAsAction="ifRoom|collapseActionView"
        app:actionViewClass="android.support.v7.widget.SearchView"/>

</menu>

AndroidManifest.xml(在主要活动中)

<intent-filter>
                <action android:name="android.intent.action.SEARCH"/>
            </intent-filter>

            <meta-data android:name="android.app.searchable"
                android:resource="@xml/searchable"/>

就是这样,您现在可以搜索您的 webview 网站了。

当我说我已经成功了(ish)时,我的 onPageStartedonPageFinished 事件在加载搜索 URL 时不起作用,但在正常的 mwebView.loadUrl 链接上工作正常。

我的onPageStartedonPageFinished 代码是:

ProgressBar pd = null;
        ImageView iv = null;
        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {

            iv = (ImageView)findViewById(R.id.imageView2);
            pd = (ProgressBar)findViewById(R.id.progressBar1);
            iv.setVisibility(View.VISIBLE);
            pd.setVisibility(View.VISIBLE);

            super.onPageStarted(view, url, favicon);
        }

        @Override
        public void onPageFinished(WebView view, String url) {
            pd.postDelayed(new Runnable() {
                public void run() {
                    pd.setVisibility(View.GONE);
                }
            }, 100);
            iv.postDelayed(new Runnable() {
                public void run() {
                    iv.setVisibility(View.GONE);
                }
            }, 100);
            super.onPageFinished(view, url);
        }

有人知道为什么会这样吗?

【讨论】:

    【解决方案2】:
    MyWebView.setWebViewClient(new WebViewClient());
    MyWebView.getSettings().setJavaScriptEnabled(true);
    
    //URL_Search is a SearchView.
    
    URL_Search.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
                @Override
                public boolean onQueryTextSubmit(String url) {
    
                    if (url.contains(".com")){
                        url = "https://www." + url + "/";
                        if (URLUtil.isValidUrl(url)) {
                            MyWebView.loadUrl(url);
                        }
                    }
                    else{
    
                    }
                    return true;
                }
    
                @Override
                public boolean onQueryTextChange(String url) {
                    return false;
                }
            });
    

    【讨论】:

    • 非常简单的方法,但有效。值得作为一篇文章。
    猜你喜欢
    • 2013-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-16
    • 1970-01-01
    • 2018-10-18
    • 2011-04-25
    相关资源
    最近更新 更多