使用AppCompat实现SearchView

19

我之前在使用appcompat.v7时在Actionbar中实现了SearchView,但当我想要使用support library v7中的SearchView时,它显示出空异常。

在样式中

<item android:id="@+id/action_search"
    android:title="@string/action_search"
    android:icon="@drawable/ic_action_search"
    app:showAsAction="always|collapseActionView"
    android:actionViewClass="android.support.v7.widget.SearchView" />

在Java类中:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu, menu);
    SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
    searchView.setOnQueryTextListener(this);
    return super.onCreateOptionsMenu(menu);
}

我的问题是如何在onCreateOptionsMenu中声明SearchView以便能够设置查询监听器?


3
正如Espen Riskedal所说:“将android:actionViewClass更改为app:actionViewClass”也很重要。 - gio
2个回答

27

你应该使用 MenuItemCompat 中的静态方法来处理所有的 AppCompat 菜单项。这在这篇博客文章中作为“新集成”的最后一项提到。只需将你的 SearchView 声明替换为以下内容即可。

SearchView searchView = (SearchView) MenuItemCompat.getActionView(menu.findItem(R.id.action_search));

这是一个指向MenuItemCompat文档的链接。

编辑: 我假设你正在使用支持新Toolbar小部件的最新版本的AppCompat。


1
你可以使用 SearchView 上的 setOnSearchClickListener 方法来实现。http://developer.android.com/reference/android/support/v7/widget/SearchView.html - ebarrenechea

23
如果您将android:actionViewClass更改为app:actionViewClass,您现有的代码将继续正常工作。

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