【问题标题】:The android searchView does not submit the search requsetandroid searchView 不提交搜索请求
【发布时间】:2014-05-07 16:24:19
【问题描述】:

我花了一整天的时间来解决这个问题:

我有两个活动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;
}

但是当我在搜索视图中输入内容并提交时,我无法进入SearchDaemon

有什么问题?

【问题讨论】:

    标签: android searchview


    【解决方案1】:

    您的 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 在我的项目中展示了一个工作设置。

    【讨论】:

      【解决方案2】:

      您需要更改清单中的声明。从.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)));
      

      【讨论】:

      • 另见我的另一个答案:stackoverflow.com/questions/18832890/…
      • 谢谢,这行得通,但这使得searchinfo 似乎与结果活动而不是用户输入活动绑定,不是吗?哇!!!!如果我想使用SearchDaemon 来执行来自具有不同搜索信息的不同活动的查询请求呢?
      • 只要你有一个activity(SearchDaemon)来接收结果,我觉得应该没问题。这一切都非常令人费解,而且没有很好的记录。我花了一段时间才让它在我的应用程序中运行。
      猜你喜欢
      • 1970-01-01
      • 2014-11-12
      • 2023-03-14
      • 2014-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多