您的位置:首页 > 其它

ActionBar中添加搜索框( search )及遇到的空指针问题

2016-10-31 00:00 393 查看
在这几天的开发学习中,看到一个需求,就是要在导航栏中添加搜索框,于是乎就各种查资料,学习以及使用.
导航栏有两种实现方式,一种是用ActionBar,另一种是用ToolBar.(我在这里是用的ActionBar)
添加的方法;
在menu菜单下的代码如下
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/search"
app:actionViewClass="android.support.v7.widget.SearchView"
android:orderInCategory="100"
android:icon="@drawable/actionbar_search_icon"
android:title="search"
android:visible="true"
app:showAsAction="always"/>
</menu>


简单说一下 showAsAction的其他属性,如果设置成never的话,菜单栏上就有三个竖直的小白点菜单

alaways:一直显示在溢出菜单外
ifRoom:溢出菜单外如果有空间,就显示在溢出菜单外
never:一直显示在溢出菜单内

自己设置看下效果就立刻懂了
在Activity中的代码如下
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu, menu);
// 获得menu中指定的菜单项
MenuItem item = menu.findItem(R.id.search);
// 获得菜单项中的SearchView
SearchView searchView = (SearchView) item.getActionView();
// 为searchView添加事件
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
// 输入后点击回车改变文本
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
// 随着输入改变文本
public boolean onQueryTextChange(String newText) {
return false;
}
});
return true;
}


SearchView组件的其他常用方法如下:

①setIconifiedByDefault(boolean iconified) ===> 设置搜索框默认是否自动缩小为图标。
②setOnQueryTextListener(SearchView,OnQueryTextListener listener) ===> 为搜索框设置监听器
③setSubmitButtonEnabled(boolean enabled) ===> 设置是否显示搜索按钮
④setQueryHint(CharSequence hint) ===> 设置搜索框内的默认显示的提示文本

做到这一步,搜索框基本就出来.,谈一下笔者遇到的空指针问题
做到这一步,搜索框基本就出来.,谈一下笔者遇到的空指针问题
笔者在这边运行了三次,每次都是空指针,用了好几种方法都是能确定了空指针的变量,却不知道该怎么解决.
于是乎又找度娘寻答案去了,终于给我找到了.
原因就是在menu布局中不正确使用V7包
常规的写法;android:actionViewClass="android.support.v7.widget.SearchView"
正确的写法;app:actionViewClass="android.support.v7.widget.SearchView"
命名空间采用;xmlns:app="http://schemas.android.com/apk/res-auto"
这样问题就解决了!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  menu actionbar search