Android SearchView小部件从不启动可搜索结果活动

Android SearchView小部件从不启动可搜索结果活动,android,android-intent,android-activity,android-actionbar,android-manifest,Android,Android Intent,Android Activity,Android Actionbar,Android Manifest,我正在尝试在我的应用程序中实现一个SearchView小部件 问题:当我按下搜索时,我的可搜索活动从未启动以显示结果。由于某种原因,SearchView小部件未链接到结果活动 以下是相关代码: AndroidManifest.xml <!--ACTIVITY WITH SEARCHVIEW WIDGET--> <activity android:name=".activity.LocationManagerActivity" androi

我正在尝试在我的应用程序中实现一个SearchView小部件

问题:当我按下搜索时,我的可搜索活动从未启动以显示结果。由于某种原因,SearchView小部件未链接到结果活动

以下是相关代码:

AndroidManifest.xml

<!--ACTIVITY WITH SEARCHVIEW WIDGET-->
    <activity
        android:name=".activity.LocationManagerActivity"
        android:label="@string/title_activity_location_manager" >

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

<!--ACTIVITY TO DISPLAY RESULTS-->
    <activity
        android:name=".activity.LocationManagerResultsActivity"
        android:launchMode="singleTop"
        android:label="@string/title_activity_location_manager_results" >

        <intent-filter>
            <action android:name="android.intent.action.search" />
        </intent-filter>

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

public class LocationManagerActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_location_manager);
}

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

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

    ComponentName componentName = new ComponentName(this, LocationManagerResultsActivity.class);
    searchView.setSearchableInfo(searchManager.getSearchableInfo(componentName));

    return true;
}

}
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_location_manager_results);

    handleIntent(getIntent());
}

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);

    handleIntent(intent);
}

private void handleIntent(Intent intent) {
    Toast.makeText(this, "have intent", Toast.LENGTH_SHORT);

    if(intent.getAction().equals(Intent.ACTION_SEARCH)) {
        String query = intent.getStringExtra(SearchManager.QUERY);
        doSearch(query);
    }
}
LocationManagerResultsActivity从来不是由LocationManagerActivity搜索视图实际创建的

我已经做了我能找到的关于所有其他问题的一切

  • default\u searchable
    添加到基本活动
  • android.app.searchable
    @xml/searchable
    添加到可搜索活动中
  • 更改
    getComponentName()
    以获取可搜索活动的组件名称
换句话说,我可以在搜索栏中键入内容,但当我按search时,什么也没有发生


我做错了什么?

问题是我没有正确地将搜索意图过滤器的名称大写

过去是什么:

<intent-filter>
        <action android:name="android.intent.action.search" />
</intent-filter>

现在是:

<intent-filter>
            <action android:name="android.intent.action.SEARCH" />
</intent-filter>


这解决了我所有的问题。

问题在于我没有正确地将搜索意图过滤器的名称大写

过去是什么:

<intent-filter>
        <action android:name="android.intent.action.search" />
</intent-filter>

现在是:

<intent-filter>
            <action android:name="android.intent.action.SEARCH" />
</intent-filter>

这解决了我所有的问题