在使用searchview和listview+toolbar实现搜索关联

在使用searchview和listview+toolbar实现搜索关联
分为以下几步:
一,添加toolbar的布局如:




    
    
```
二, 然后  在menu文件中toolbar添加searchview菜单,默认为图标,可以实现点击展开


xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
android:id="@+id/search"
android:title="dd"
app:showAsAction="collapseActionView|ifRoom"
app:actionViewClass="android.support.v7.widget.SearchView"
android:icon="@mipmap/abc_ic_search_api_mtrl_alpha"
/>
```
这里需要把showAsAction设置为collapseAction|ifRoom ddd
actionViewClass设置为系统或者v7库的searchview组件
这里设置为app,是因为android studio自动生成项目后,项目自动继承ActionBarActivity类,代码就会出现兼容问题
Ddd showAsAction 属性共五个值:
ifRoom 会显现item,但是如果有4个或以上会隐藏在溢出列表中 ,但是并不局限于4个,可以根据的宽窄never永远不会显示
Always 无论是否溢出,总会显示
Never 从不显示
withText示意actionbar 要显示文本标题,actionbar会尽可能显示标题,但是如果空间有限,文本标题可能显示不全
CollapseActionView 声明这个操作视窗应该被折叠一个按钮中,当用户选择这个按钮时,这个操作视窗展开,否则,这个操作视窗在默认的情况下是可见的,并且即使在用于不适用的时候,也要占据有效空间
一般要配合ifRoom使用
三,在xml中注册,隐藏Actionbar 设置如下

android:label="@string/app_name"
android:theme="@style/Theme.AppCompat.Light.NoActionBar">

    
        
         
        
    
    ```
新建一个searchable.xml  ,主要设置android:label,在这里需要注意xml和searchable的label需要设置为同一个值 ,为这个花了好长时间


android:layout_width="match_parent"
android:layout_height="match_parent"
android:hint="search"
android:label="@string/app_name">
```

四,在主Mainactivity中加载菜单

    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu,menu);
        MenuItem menuItem=menu.findItem(R.id.search);//
           searchView= (SearchView) MenuItemCompat.getActionView(menuItem);//加载searchview
                searchView.setOnQueryTextListener(this);//为搜索框设置监听事件
        searchView.setSubmitButtonEnabled(true);//设置是否显示搜索按钮
       searchView.setQueryHint("查找");//设置提示信息
        searchView.setIconifiedByDefault(true);//设置搜索默认为图标
        return  true; }```

五,加载toolbar,绑定listview 

listView= (ListView) findViewById(R.id.listview);
Toolbar toolbar=(Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
ArrayAdapter adapter=new ArrayAdapter(this,android.R.layout.simple_list_item_1,data);
listView.setAdapter(adapter);
listView.setTextFilterEnabled(true);//设置为可过滤的

六,监听事件实现searchview和listview搜索

public boolean onQueryTextChange(String newText) {
Toast.makeText(this,"154",Toast.LENGTH_SHORT).show();
if (TextUtils.isEmpty((newText))){
listView.clearTextFilter();
}else{
listView.setFilterText(newText);}
return true;}```
好,最终终于实现toolbar上实现searchview的搜索,绑定listview

在使用searchview和listview+toolbar实现搜索关联_第1张图片
Paste_Image.png
在使用searchview和listview+toolbar实现搜索关联_第2张图片
Paste_Image.png

你可能感兴趣的:(在使用searchview和listview+toolbar实现搜索关联)