AppCompatActivity,最开始希望在Fragment上做一个ToolBar,然后添加一个SearchView来进行搜索。
最开始发现,SearchView点击放大镜没有反应(正常情况下展开输入框),后来发现是在onCreateOptionsMenu()中缺少设置searchable到searchView的代码,
但是添加之后就报了NullPointer错误,发现SearchView searchView = (SearchView)searchItem.getActionView();得到的searchView为null。
在stack overflow上找到有很多说法,有一种情况是AppCompatActivity或者主题自动生成的ActionBar可能与SearchView不通用,但我确认了我都使用的是v7的组件。
(这里是我根据stack上的讨论回复大致的猜测,如有错误请指出)
还有一种情况是我遇到的:
在menu的xml文件中,根据常规写法是
android:actionViewClass="android.support.v7.widget.SearchView"
但正确的写法是
是
app:actionViewClass="android.support.v7.widget.SearchView"
采用
xmlns:app="http://schemas.android.com/apk/res-auto"
问题解决,由于刚从web转向android,这里的具体原因我只能猜测是support.v7包的类应该使用自定义的命名空间前缀(类并不在标准库中),类似CardView,还有
Material Design的包的写法。如有同仁了解具体细节请指正。
stack overflow原文 SearchView getActionView returning null:http://stackoverflow.com/questions/18407171/searchview-getactionview-returning-null