Android记事本在菜单栏添加搜索按钮方法

效果图

这个app结构和我之前将记事本开发的博客基本一致,我这里直接讲一下怎样添加

使用的开发软件为android studio

首先在res目录下新建文件夹menu,添加目录布局文件main_menu

 之后在main_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"
        android:icon="@drawable/ic_search_black_24dp"/这里设置图标,可以自由选择,我是在drawable下添加了放大镜的图标并在此引用
        android:title="Search"
        app:actionViewClass="android.widget.SearchView"
        app:showAsAction="always"
        ></item>
</menu>

  之后在Mainactivity中重写onCreateOptionsMenu(Menu menu)函数,监听等功能都在此实现

 public boolean onCreateOptionsMenu(Menu menu)
    {
        getMenuInflater().inflate(R.menu.main_menu,menu);
        MenuItem search=menu.findItem(R.id.search);
        SearchView mysearchview=(SearchView)search.getActionView();
        mysearchview.setQueryHint("搜索");
        mysearchview.setOnQueryTextListener(new SearchView.OnQueryTextListener(){
            @Override
//当提交搜索框内容后执行的方法
public boolean onQueryTextSubmit(String query) { return false; } @Override
//当搜索框内内容改变时执行的方法
public boolean onQueryTextChange(String newText) { refresh(newText);//数据更新函数,newText为获取到的搜索框中内容 return false; } }); return super.onCreateOptionsMenu(menu); }

更新函数

void refresh(String key)
{

    SimpleAdapter adapter = new SimpleAdapter(this,MainActivity.this.mytable.getdata(key), R.layout.list
            , new String[]{"id","text","time"},
            new int[]{R.id.id,R.id.text,R.id.time});
    ListView listView=(ListView)findViewById(R.id.vi);
    listView.setAdapter(adapter);

}

这里附上数据库操作类中getdata()方法

 public List<Map<String,Object>> getdata(String key)
    {List<Map<String,Object>>list=new ArrayList<Map<String,Object>>();
        Map<String,Object> map=new HashMap<String,Object>();

        String sql="SELECT id,text,time FROM "+TABLENAME+" WHERE  text LIKE '%"+key+"%' OR time LIKE  '%"+key+"%'";
        Cursor result =this.db.rawQuery(sql,null);
        for(result.moveToFirst();!result.isAfterLast();result.moveToNext())
        {
            map=new HashMap<String,Object>();
            map.put("id",result.getInt(0));
            map.put("text",result.getString(1));
            map.put("time",result.getString(2));
            list.add(map);
        }
        return  list;}

 讲得比较笼统,具体的文件结构还请参照我之前的随笔https://www.cnblogs.com/liuleliu/p/12230819.html

原文地址:https://www.cnblogs.com/liuleliu/p/12256918.html