SearchView 未向结果发送意图 activity

SearchView not sending intent to result activity

我有一个 SearchView 似乎不起作用。 SearchView 显示在菜单栏中,我可以输入文本。但是,当我单击 phone 屏幕键盘上的搜索图标时,什么也没有发生。理想情况下,这将启动一个新的 activity,并发送要使用的查询字符串。我试图实现 SearchView.setOnSearchClickListener 方法来处理点击,但是当我这样做时,只要我点击搜索图标输入文本,结果 activity 就会加载,没有参数。任何帮助查明我可能做错了什么的人都将不胜感激。

我在 Activity:

中创建了这样的菜单
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.main_menu, menu);

    // Associate searchable configuration with the SearchView
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    final SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView();
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));

    return true;
}

public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.convert:
            ...
            return true;
        default:
           return super.onOptionsItemSelected(item);
    }
}

以及搜索的 xml:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto">
        <item android:id="@+id/search"
            android:title="@string/search"
            android:icon="@android:drawable/ic_menu_search"
            app:showAsAction="always"
            android:actionViewClass="android.support.v7.widget.SearchView"
            app:actionViewClass="android.support.v7.widget.SearchView"/>

        <item android:id="@+id/convert"
            android:title="@string/dlconvert" />
    </menu>

我还将此添加到 activity 的清单中,搜索显示:

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

这是搜索结果的定义activity:

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

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

searchable.xml 文件仅包含:

<searchable xmlns:android="http://schemas.android.com/apk/res/android"
        android:label="@string/app_name"
        android:hint="Search..." />

编辑 - 问题与可能的重复问题不同。本应接收 Intent 的 activity 根本不会启动。

在你的onCreateOptionsMenu()中:

searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
    @Override
    public boolean onQueryTextSubmit(String query) {
        Intent intent = new Intent(MainActivity.this, SearchActivity.class);
        intent.putExtra("searchTerm", query);
        startActivity(intent);
        return false;
    }

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

确保在搜索视图中实施 setOnQueryTextListener

以及您在 onQueryTextSubmit() 方法中所需的操作

public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.main_menu, menu);

    // Associate searchable configuration with the SearchView
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    final SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView();
    searchView.setOnQueryTextListener(new OnQueryTextListener() {
        @Override
        public boolean onQueryTextChange(String newText) {
            //Log.e("onQueryTextChange", "called");
            return false;
        }

        @Override
        public boolean onQueryTextSubmit(String query) {
            // start acitivy here
            return false;
        }

    });
    return true;

}

尝试

 @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.search_menu, menu);

        MenuItem item = menu.findItem(R.id.action_search);
        SearchView searchView = (SearchView) MenuItemCompat.getActionView(item);
        searchView.setOnQueryTextListener(this);

        SearchView.SearchAutoComplete searchAutoComplete = searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);
        searchAutoComplete.setHintTextColor(Color.GRAY);
        searchAutoComplete.setTextColor(Color.BLACK);


        return true;

    }

implements SearchView.OnQueryTextListener 更适合您的 activity ans 覆盖方法

searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
    @Override
    public boolean onQueryTextSubmit(String query) {
        Intent intent = new Intent(Activity.this, SearchActivity.class);
        intent.putExtra("query", query);
        startActivity(intent);
        return false;
    }

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

即使在实施 onQueryTextSubmit 之后,问题仍然存在。经过一天的问题搜索后,我终于意识到清单文件中的 activity 定义不正确 <action android:name="android.intent.action.SEARCH"/> 意图过滤器。

在显示 SearchView 的 activity 中,您需要更改

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

<meta-data
        android:name="android.app.default_searchable"
        android:value="ActivitySearchResults" />

您必须使 "searchResultActivity" 可搜索。在清单文件中的 activity(具有搜索视图)中添加以下代码。

<meta-data
                android:name="android.app.default_searchable"
                android:value=".SearchResultActivity" />