搜索视图不向结果活动发送意图



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

我在我的活动中创建菜单:

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

编辑 - 问题与可能的副本不同。本应接收意图的活动永远不会开始。

尝试

 @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 到您的活动ans Override方法

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,问题仍在继续。经过一天的搜索问题,我终于意识到我在清单文件中的不正确活动定义中有<action android:name="android.intent.action.SEARCH"/>的意图过滤器。

在您的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;

}

在显示搜索视图的活动中,您需要更改

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

to

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

您必须使"搜索resultactivity"可搜索。在您的活动中添加以下代码(其中有搜索视图)。

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

相关内容

  • 没有找到相关文章

最新更新