android搜索视图不提交搜索请求

时间:2014-03-28 09:35:42

标签: android searchview

我整天都在讨论这个问题:

我有两个活动MainActivitySearchDaemon,我想将搜索界面设为MainActivity,并将查询请求委托给SearchDaemon,这将保留所有搜索请求在我的应用程序(没有UI)中,这是我的manifeset.xml:

     <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>

        <meta-data
                android:name="android.app.default_searchable"
                android:value=".SearchableActivity"/>
    </activity>
    <activity
            android:name=".search.SearchDaemon"
            android:launchMode="singleTop">
        <intent-filter>
            <action android:name="android.intent.action.SEARCH"/>
        </intent-filter>
        <meta-data
                android:name="android.app.searchable"
                android:resource="@xml/searchable"/>
    </activity>

MainActivity

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

    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    SearchView searchView = (SearchView) menu.findItem(R.id.map_menu_search).getActionView();

    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));

    return true;
}

但是当我在searchview中输入内容并提交时,我无法进入SearchDaemon

有什么问题?

2 个答案:

答案 0 :(得分:1)

您需要更改清单中的声明。从.MainActivity删除与搜索相关的信息,并将android:value添加到.search.SearchDaemon

<activity android:name=".MainActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
        <category android:name="android.intent.category.LAUNCHER"/>
    </intent-filter>
</activity>

<activity 
    android:name=".search.SearchDaemon"
    android:launchMode="singleTop">
    <intent-filter>
        <action android:name="android.intent.action.SEARCH" />
    </intent-filter>
    <meta-data android:name="android.app.searchable" android:resource="@xml/searchable"
        android:value=".search.SearchDaemon" />
</activity>

更改使用setSearchableInfo的方式:

searchView.setSearchableInfo(searchManager.getSearchableInfo(
        new ComponentName(getApplicationContext(), SearchDaemon.class)));

答案 1 :(得分:0)

看起来MainActivity块中的元数据不正确 - 您是否有一个名为SearchableActivity的类?:

<activity android:name=".MainActivity">
  <intent-filter>
    <action android:name="android.intent.action.MAIN"/>
    <category android:name="android.intent.category.LAUNCHER"/>
  </intent-filter>

  <meta-data
    android:name="android.app.default_searchable"
    android:value=".SearchableActivity"/>
</activity>
<activity
  android:name=".search.SearchDaemon"
  android:launchMode="singleTop">
  <intent-filter>
    <action android:name="android.intent.action.SEARCH"/>
  </intent-filter>
  <meta-data
    android:name="android.app.searchable"
    android:resource="@xml/searchable"/>
</activity>

如果您将其更改为SearchDaemon,它应该有效:

<activity android:name=".MainActivity">
  <intent-filter>
    <action android:name="android.intent.action.MAIN"/>
    <category android:name="android.intent.category.LAUNCHER"/>
  </intent-filter>

  <meta-data
    android:name="android.app.default_searchable"
    android:value=".search.SearchDaemon"/>
</activity>

如果您使用ActivityAlias来启动MainActivity,则元数据需要进入activity-alias块。或者,如果您希望整个应用使用.search.SearchDaemon,则元数据可以位于application块内。

See this commit在我的项目上展示了一个有效的设置。