SearchView不向结果活动发送意图

问题描述 投票:1回答:6

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

我在我的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>

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

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

这是搜索结果活动的定义:

<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..." />

编辑 - 问题与可能的重复不一样。应该接收意图的活动永远不会开始。

android android-intent searchview
6个回答
1
投票

尝试

 @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你的活动和覆盖方法

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;
    }
}); 

1
投票

即使在实施onQueryTextSubmit之后,问题仍在继续。经过一天的搜索问题,我终于意识到我在清单文件中的错误活动定义中有<action android:name="android.intent.action.SEARCH"/>意图过滤器。


0
投票

在你的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;
    }
});

0
投票

确保在搜索视图中实现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;

}


0
投票

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

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

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

-1
投票

您将不得不搜索“searchResultActivity”。在清单文件中的活动(具有searchview)中添加以下代码。

<meta-data
                android:name="android.app.default_searchable"
                android:value=".SearchResultActivity" /> 
© www.soinside.com 2019 - 2024. All rights reserved.