使用AppCompat进行SearchView

A7m*_*dev 19 android searchview android-5.0-lollipop

我在使用appcompat.v7之前在Actionbar中实现了SearchView,但是当我想将SearchView与支持库v7一起使用时,它显示了null异常

很有型

<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" />
Run Code Online (Sandbox Code Playgroud)

在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);
}
Run Code Online (Sandbox Code Playgroud)

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

eba*_*hea 26

您应该使用静态方法来MenuItemCompat处理所有AppCompat菜单项.这个博客文章中提到了这是"新集成"下的最后一项.只需用SearchView以下内容替换您的声明即可.

SearchView searchView = (SearchView) MenuItemCompat.getActionView(menu.findItem(R.id.action_search));
Run Code Online (Sandbox Code Playgroud)

这是MenuItemCompat文档的链接.

编辑: 我只是假设您正在使用最新版本的AppCompat并支持新的Toolbar小部件.


Esp*_*dal 23

如果您更改android:actionViewClassapp:actionViewClass现有代码将继续工作.