在工具栏中实现SearchView

时间:2016-02-10 08:31:24

标签: searchview

我正在尝试在ToolBar中实现SearchView,但是当我输入内容并确认搜索时,它不会打开结果活动。

搜索出现在MainActivity中,当用户输入内容并按下搜索按钮时,它应该打开SearchResultAcivity。但它没有打开。

这就是我所做的:

AndroidManifest:

<activity
    android:name=".MainActivity"
    android:label="@string/app_name"
    android:theme="@style/AppTheme.NoActionBar">

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

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

</activity>

<activity
    android:name=".SearchResultsActivity">

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

</activity>

searchable.xml

<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
    android:label="@string/app_name"
    android:hint="search" >
</searchable>

菜单项:

<item
    android:id="@+id/action_search"
    android:title="Search"
    android:orderInCategory="100"
    android:icon="@drawable/search"
    app:actionViewClass = "android.support.v7.widget.SearchView"
    app:showAsAction="collapseActionView|ifRoom" />

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    MenuItem searchItem = menu.findItem(R.id.action_search);

    // Get the SearchView and set the searchable configuration
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
    // Assumes current activity is the searchable activity
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
    searchView.setIconifiedByDefault(true); // Iconify the widget


return true;
}

1 个答案:

答案 0 :(得分:1)

在你的清单中你犯了一个错误。

我认为您希望在所有活动中进行搜索,并且为了工作,您需要在主要活动之前进行搜索:

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

并把它放在searchresultactivity中:

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

结果是这样的:

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

    <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=".searchableactivity">
        <intent-filter>
            <action android:name="android.intent.action.SEARCH" />
        </intent-filter>

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