Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android SearchView未向结果活动发送意图_Android_Android Intent_Searchview - Fatal编程技术网

Android SearchView未向结果活动发送意图

Android SearchView未向结果活动发送意图,android,android-intent,searchview,Android,Android Intent,Searchview,我有一个SearchView似乎不起作用。SearchView显示在菜单栏中,我可以输入文本。但是,当我点击手机屏幕键盘上的搜索图标时,什么也没发生。理想情况下,这将启动一个新的活动,发送一个要使用的查询字符串。我试图实现SearchView.setOnSearchClickListener方法来处理单击操作,但是当我这样做时,只要单击搜索图标输入文本,结果活动就会加载,不带任何参数。如果能帮我查明我可能做错了什么,我将不胜感激 我在“活动”中创建了如下菜单: public boolean on

我有一个
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..." />


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

在您的
onCreateOptions菜单()
中:


确保在搜索视图上实现
setOnQueryTextListener

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

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;

    }
然后
将SearchView.OnQueryTextListener
实现到您的活动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;
    }
}); 

即使在实现了onquerytexsubmit之后,问题仍然存在。搜索问题一天后,我终于意识到清单文件中不正确的活动定义中有
意图过滤器。

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

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


您必须使“searchResultActivity”可搜索。在清单文件中的活动(具有searchview)中添加以下代码

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


您是否解决了问题?@Prem我解决了,谢谢。当搜索结果活动是您的主要活动,并且您不希望其他活动显示结果时,此答案就是解决方案。即使是android文档也没有涵盖这一点。谢谢@Goku
<meta-data
                android:name="android.app.default_searchable"
                android:value=".SearchResultActivity" />