搜索视图需要点击两次才能打开。

16

我正在按照这个Android教程来实现搜索视图。在解决了一些问题之后,我让它能够工作了。然而,需要点击两次搜索视图才能打开editText。有什么想法吗?

Filter类:

@Override
public boolean onCreateOptionsMenu(Menu menu)
{
    getMenuInflater().inflate(R.menu.toolbar_menu_filter, menu);

    // Associate searchable configuration with the SearchView
    SearchManager searchManager =
            (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    SearchView searchView =
            (SearchView) menu.findItem(R.id.menu_item_search).getActionView();
    searchView.setSearchableInfo(
            searchManager.getSearchableInfo(getComponentName()));

    searchView.setQueryHint(getResources().getString(R.string.search_hint));

    return super.onCreateOptionsMenu(menu);
}

菜单.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context=".FilterUI">

<item android:id="@+id/menu_item_search"
    android:title="Search"
    android:icon="@drawable/ic_search_white"
    app:actionViewClass="android.widget.SearchView"
    app:showAsAction="ifRoom|collapseActionView"/>

<item android:id="@+id/menu_item_options"
    android:icon="@drawable/ic_clear_all_white"
    app:showAsAction="ifRoom"
    android:title="@string/filter_default"/>

清单文件

<activity android:name=".Activities.FilterUI"
        android:screenOrientation="portrait"
        android:configChanges="orientation"
        android:windowSoftInputMode="adjustNothing">

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

    </activity>

    <activity android:name=".Activities.SearchActivity">

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

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

    </activity>

8
为什么不使用 SearchView v7,更加兼容且易于使用:http://developer.android.com/intl/es/reference/android/support/v7/widget/SearchView.html。 - ʍѳђઽ૯ท
哦,现在它运行良好了,谢谢! - Dani M
2
注意:此类包含在支持库中,以与API级别7及更高的兼容性。如果您仅针对API级别11及更高版本开发应用程序,应改使用框架的SearchView类。无论如何,支持V7是正确的选择。 - Daniel Wilson
可能没有使用v7,因为开发者文档 https://developer.android.com/training/search/setup 没有使用它。 应该像@Mohsen说的那样使用v7。 - Eloi Navarro
1个回答

13
可能已经太晚回答了,但是让我们完成这件事。像我说的那样,最好使用:
app:actionViewClass="android.support.v7.widget.SearchView"

为了更好的兼容性等等。但关键是,现在在新的AndroidX中,我们不能再使用android.support,因为我们已经迁移到AndroidX,而且只会有:

app:actionViewClass="android.widget.SearchView"

可用。但是,让我们看看文档对最新API(AndroidX)等的说明:

注意:此类已包含在支持库中,以便与API级别7及更高版本兼容。如果您仅为API级别11及更高版本开发应用程序,则应改用框架android.widget.SearchView类。

因此,在AndroidX中,我已经找到了:

app:actionViewClass="androidx.appcompat.widget.SearchView"

虽然已经有新的搜索框控件被推荐使用,但你仍然可以使用android.widget.SearchView


2
非常感谢,将 app:actionViewClass="android.widget.SearchView" 替换为 app:actionViewClass="androidx.appcompat.widget.SearchView" 对我很有帮助。 - Biplob Das

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接