EditText+listview+数据库操作实现搜索功能
来源:互联网 发布:键盘侠网络暴力的危害 编辑:程序博客网 时间:2024/04/30 23:27
实现搜索功能方式有哪些
android搜索框功能是非常常见的,实现搜索框的方式有很多种,常见的有这三种:
- SearchView
- autocompletetextview
- EditText
- 自定义方式
EditText+listview+数据库
本文主要讲述以下这种方式,不建议使用sp存储。sp存储不好控制,而且没有数据库的方式实现起来简单,方便以后的管理(属不定需要增加需求了呢)
- 先看效果图:
确定所需的搜索功能是什么样的需求
本文提供的是以下需求:
- 输入关键字,点击搜索后,保存输入的关键字,跳转对应的搜索结果界面
- 再次进入有搜索功能的界面,输入关键字自动查询数据裤,把数据显示出来(只有输入关键字才会显示搜索历史,默认是不显示的)
- 清空历史数据
1.准备一个数据库帮助类SearchRecordSQHelper,来创建一个保存搜索历史的表
/** * Created by Administrator on 2017/5/14. */public class SearchRecordSQHelper extends SQLiteOpenHelper { private static String name = "mysearch.db"; private static Integer version = 1; public SearchRecordSQHelper(Context context) { super(context, name, null, version); } @Override public void onCreate(SQLiteDatabase db) { //打开数据库,建立了一个叫records的表,里面只有一列name来存储历史记录: db.execSQL("create table records(id integer primary key autoincrement,name varchar(200))"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { }}
2.在oncreat中实例化这个帮助类
SearchRecordSQHelper helper = new SearchRecordSQHelper(this); //进入界面,历史记录是默认显示的(测试) // queryRecords("")
queryRecords(String tempName)查询数据
/* *模糊查询数据 并显示在ListView列表上 * */ private void queryRecords(String tempName) { //模糊搜索 Cursor cursor = helper.getReadableDatabase().rawQuery( "select id as _id,name from records where name like '%" + tempName + "%' order by id desc ", null); // 创建adapter适配器对象,装入模糊搜索的结果 adapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, cursor, new String[]{"name"}, new int[]{android.R.id.text1}, CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER); list_result.setAdapter(adapter); adapter.notifyDataSetChanged(); }
3.在EditText中输入关键字,点击搜索查询
String et_text = et.getText().toString().toString().trim(); if(et_text.length()==0){ return; } //isExistData是否存在历史记录,返回一个布尔值 boolean is_existData = isExistData(et_text); if (!is_existData) { insertRecords(et_text);//插入数据 //数据库中插入数据后,再次查询显示数据,这里是为了测试,真实情况应该直接跳转一个界面的 queryRecords(""); } //根据输入的内容模糊查询数据结果,并跳转到另一个界面,这个根据需求实现 Toast.makeText(MainActivity.this,"搜索结果:"+et_text, Toast.LENGTH_SHORT).show();
isExistData是否存在历史记录,返回一个布尔值
/** * 是否存在数据,返回boolean */ private boolean isExistData(String tempName) { //从records这个表里找到name=tempName的id Cursor cursor = helper.getReadableDatabase().rawQuery( "select id as _id,name from records where name =?", new String[]{tempName}); //判断是否有下一个 return cursor.moveToNext(); }
insertRecords(et_text)插入数据
/* *插入数据 * */ private void insertRecords(String tempName) { //历史记录的字段:tempName db = helper.getWritableDatabase(); db.execSQL("insert into records(name) values('" + tempName + "')"); db.close(); }
再次进入有搜索功能的界面,输入关键字,动态查询数据库,匹配相应数据,显示出来
- 这里需要用到TextWatcher,来对edittext输入的信息进行实时监听
//在EditText中每次输入信息,都会依次调用这三个方法 et.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { //文本输入之前调用 } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { //文本输入中调用 } @Override public void afterTextChanged(Editable s) { //文本输入完调用 } });
- 功能实现(输入关键字,查询数据,显示出来)
@Override public void afterTextChanged(Editable s) { //文字输入完成调用 if (s.toString().trim().length() != 0) { list_result.setVisibility(View.VISIBLE); clearRecord.setVisibility(View.VISIBLE); serch_result.setVisibility(View.VISIBLE); } //每次输入后都查询数据库并显示 //根据输入的值去模糊查询数据库中有没有数据 String tempName = et.getText().toString().trim(); queryRecords(tempName); }
清空数据
/** * 清空数据 */ private void clearRecord() { db = helper.getWritableDatabase(); db.execSQL("delete from records"); db.close(); }
到这里基本上完成了,什么点击事件的都没写,本文主要时提供一个思路,具体需要什么功能,还需要根据实际情况定制!
demo下载:http://download.csdn.net/detail/qq_34501274/9842502
0 2
- EditText+listview+数据库操作实现搜索功能
- Android ListView用EditText实现搜索功能
- EditText实现搜索过滤功能
- Android自定义搜索框(EditText)的搜索功能实现,过滤ListView
- 应用Edittext实现搜索框的功能
- Android 用EditText实现搜索框功能
- android edittext + listview 实现搜索listview中的内容
- listview+EditText 实现过滤搜索listview中的内容
- android: ListView,及数据库操作,模拟实现 联系人功能
- 【Android】EditText实现搜索功能,把键盘回车键改为搜索;EditText隐藏光标
- 使用EditText和SharedPreferences实现搜索历史记录提示功能
- EditText+ListView实现从动态显示数据库数据
- android edittext+listview进阶 实现搜索listview中的内容 定制自己的过滤器
- EditText+RecycleView实现搜索功能之一:对EditText内容变化实时监听
- 用edittext做自定义listview搜索过滤器
- EditText和数据库结合使用,类似淘宝搜索功能及历史记录
- EditText配合listview实现过滤
- EditText+ListView实现AutoCompleteTextView效果
- 前端编写第一个后台接口
- Alsa音频编程
- 百度云获取下载链接代码。
- error C2065: “servAddr”: 未声明的标识符__错误记录
- The Eclipse executable launcher was unable to locate its companion shared library
- EditText+listview+数据库操作实现搜索功能
- 有哪些比较好看的纪录片?
- mybatis 保存后返回保存成功后的id
- Android开发之--将list的 [ ] 去除
- 成员变量和局部变量的区别
- PAT 1055.集体照
- TP3.2.3使用CKeditor编辑器在页面中上传图片
- Android公用头部BaseHeadActivity
- Unity3d在脚本中销毁预设体时遇到的问题