Android实现搜索功能并本地保存搜索历史记录

本文实例为大家分享了Android实现搜索功能,并且需要显示搜索的历史记录,供大家参考,具体内容如下

效果图:

本案例实现起来很简单,所以可以直接拿来嵌入项目中使用,涉及到的知识点:
- 数据库的增删改查操作
- ListView和ScrollView的嵌套冲突解决
- 监听软键盘回车按钮设置为搜索按钮
- 使用TextWatcher( )实时筛选
- 已搜索的关键字再次搜索不重复添加到数据库
- 刚进入页面设置软键盘不因为EditText而自动弹出

代码

RecordSQLiteOpenHelper.java

package com.cwvs.microlife; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class RecordSQLiteOpenHelper extends SQLiteOpenHelper { private static String name = "temp.db"; private static Integer version = 1; public RecordSQLiteOpenHelper(Context context) { super(context, name, null, version); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("create table records(id integer primary key autoincrement,name varchar(200))"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } }

MainActivity.java

package com.cwvs.microlife; import java.util.Date; import android.app.Activity; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.text.Editable; import android.text.TextWatcher; import android.view.KeyEvent; import android.view.View; import android.view.Window; import android.view.inputmethod.InputMethodManager; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.CursorAdapter; import android.widget.EditText; import android.widget.SimpleCursorAdapter; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends Activity { private EditText et_search; private TextView tv_tip; private MyListView listView; private TextView tv_clear; private RecordSQLiteOpenHelper helper = new RecordSQLiteOpenHelper(this);; private SQLiteDatabase db; private BaseAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); // 初始化控件 initView(); // 清空搜索历史 tv_clear.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { deleteData(); queryData(""); } }); // 搜索框的键盘搜索键点击回调 et_search.setOnKeyListener(new View.OnKeyListener() {// 输入完后按键盘上的搜索键 public boolean onKey(View v, int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_DOWN) {// 修改回车键功能 // 先隐藏键盘 ((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow( getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); // 按完搜索键后将当前查询的关键字保存起来,如果该关键字已经存在就不执行保存 boolean hasData = hasData(et_search.getText().toString().trim()); if (!hasData) { insertData(et_search.getText().toString().trim()); queryData(""); } // TODO 根据输入的内容模糊查询商品,并跳转到另一个界面,由你自己去实现 Toast.makeText(MainActivity.this, "clicked!", Toast.LENGTH_SHORT).show(); } return false; } }); // 搜索框的文本变化实时监听 et_search.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) { if (s.toString().trim().length() == 0) { tv_tip.setText("搜索历史"); } else { tv_tip.setText("搜索结果"); } String tempName = et_search.getText().toString(); // 根据tempName去模糊查询数据库中有没有数据 queryData(tempName); } }); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { TextView textView = (TextView) view.findViewById(android.R.id.text1); String name = textView.getText().toString(); et_search.setText(name); Toast.makeText(MainActivity.this, name, Toast.LENGTH_SHORT).show(); // TODO 获取到item上面的文字,根据该关键字跳转到另一个页面查询,由你自己去实现 } }); // 插入数据,便于测试,否则第一次进入没有数据怎么测试呀? Date date = new Date(); long time = date.getTime(); insertData("Leo" + time); // 第一次进入查询所有的历史记录 queryData(""); } /** * 插入数据 */ private void insertData(String tempName) { db = helper.getWritableDatabase(); db.execSQL("insert into records(name) values('" + tempName + "')"); db.close(); } /** * 模糊查询数据 */ private void queryData(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); // 设置适配器 listView.setAdapter(adapter); adapter.notifyDataSetChanged(); } /** * 检查数据库中是否已经有该条记录 */ private boolean hasData(String tempName) { Cursor cursor = helper.getReadableDatabase().rawQuery( "select id as _id,name from records where name =?", new String[]{tempName}); //判断是否有下一个 return cursor.moveToNext(); } /** * 清空数据 */ private void deleteData() { db = helper.getWritableDatabase(); db.execSQL("delete from records"); db.close(); } private void initView() { et_search = (EditText) findViewById(R.id.et_search); tv_tip = (TextView) findViewById(R.id.tv_tip); listView = (com.cwvs.microlife.MyListView) findViewById(R.id.listView); tv_clear = (TextView) findViewById(R.id.tv_clear); // 调整EditText左边的搜索按钮的大小 Drawable drawable = getResources().getDrawable(R.drawable.search); drawable.setBounds(0, 0, 60, 60);// 第一0是距左边距离,第二0是距上边距离,60分别是长宽 et_search.setCompoundDrawables(drawable, null, null, null);// 只放左边 } }

MyListView.java

package com.cwvs.microlife; import android.content.Context; import android.util.AttributeSet; import android.widget.ListView; public class MyListView extends ListView { public MyListView(Context context) { super(context); } public MyListView(Context context, AttributeSet attrs) { super(context, attrs); } public MyListView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, expandSpec); } }

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:focusableInTouchMode="true" android:orientation="vertical" tools:context="${relativePackage}.${activityClass}"> <LinearLayout android:layout_width="fill_parent" android:layout_height="50dp" android:background="#E54141" android:orientation="horizontal" android:paddingRight="16dp"> <ImageView android:layout_width="45dp" android:layout_height="45dp" android:layout_gravity="center_vertical" android:padding="10dp" android:src="@drawable/back" /> <EditText android:id="@+id/et_search" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:background="@null" android:drawableLeft="@drawable/search" android:drawablePadding="8dp" android:gravity="start|center_vertical" android:hint="输入查询的关键字" android:imeOptions="actionSearch" android:singleLine="true" android:textColor="@android:color/white" android:textSize="16sp" /> </LinearLayout> <ScrollView android:layout_width="wrap_content" android:layout_height="wrap_content"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:paddingLeft="20dp" > <TextView android:id="@+id/tv_tip" android:layout_width="match_parent" android:layout_height="50dp" android:gravity="left|center_vertical" android:text="搜索历史" /> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="#EEEEEE"></View> <com.cwvs.microlife.MyListView android:id="@+id/listView" android:layout_width="match_parent" android:layout_height="wrap_content"></com.cwvs.microlife.MyListView> </LinearLayout> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="#EEEEEE"></View> <TextView android:id="@+id/tv_clear" android:layout_width="match_parent" android:layout_height="40dp" android:background="#F6F6F6" android:gravity="center" android:text="清除搜索历史" /> <View android:layout_width="match_parent" android:layout_height="1dp" android:layout_marginBottom="20dp" android:background="#EEEEEE"></View> </LinearLayout> </ScrollView> </LinearLayout>

以上就是本文的全部内容,希望对大家的学习有所帮助。

时间: 2024-10-25 20:41:59

Android实现搜索功能并本地保存搜索历史记录的相关文章

Android实现搜索功能并本地保存搜索历史记录_Android

本文实例为大家分享了Android实现搜索功能,并且需要显示搜索的历史记录,供大家参考,具体内容如下 效果图: 本案例实现起来很简单,所以可以直接拿来嵌入项目中使用,涉及到的知识点: - 数据库的增删改查操作 - ListView和ScrollView的嵌套冲突解决 - 监听软键盘回车按钮设置为搜索按钮 - 使用TextWatcher( )实时筛选 - 已搜索的关键字再次搜索不重复添加到数据库 - 刚进入页面设置软键盘不因为EditText而自动弹出 代码 RecordSQLiteOpenHel

java-给爬虫添加个搜索功能,带着搜索的参数,跳转到搜索的页面。

问题描述 给爬虫添加个搜索功能,带着搜索的参数,跳转到搜索的页面. 要添加一个搜索的功能,就是自己在控制台手动输入一个查询的字段,然后带着这个参数跳转到 查询这个参数的页面 这个要怎么写啊. 跪求具体的代码.感激不尽 解决方案 get .do?name=""

使用 Microsoft SQL Server 2000 的全文搜索功能构建 Web 搜索应用程序

server|web|程序|全文搜索 使用 Microsoft SQL Server 2000 的全文搜索功能构建 Web 搜索应用程序 Andrew B. CenciniMicrosoft Corporation 2002年12月 适用于:    Microsoft SQL Server 2000摘要:学习如何充分利用 SQL Server 2000 的全文搜索功能.本文包含有关实现最大吞吐率和最佳性能的几点提示和技巧. 目录简介 全文搜索功能简介 配置全文搜索功能 全文查询 排位和优化 其他

“图”说天下:浅谈图片搜索功能

随着360综合搜索不断地开拓进取之后,新上线了图片搜索功能.百度图片搜索每天的百度预计流量为781万4070,这还仅仅只是百度来的预计流量,实际上更多.搜索引擎市场的竞争是多元化的,不仅仅是搜索结果的竞争,包括图片.音乐等栏目的竞争也日趋日烈.360图片搜索推出以后,图片搜索市场也是"百家齐鸣",百度.谷歌.搜狗.即刻等等都开始在图片搜索领域争奇斗艳.下面笔者就开始用"图"说天下的图片搜索市场. 1.百度图片(http://image.baidu.com) 百度图片

win7搜索功能不能用了怎么办?

  win7搜索功能不能用了怎么办?win7系统自带有搜索功能,可帮助用户快速找到所需的文件或程序,搜索功能虽然速度不太给力但是准确度还是有保障.一位用户说win7搜索功能不能用了,没办法搜索到想要的文件,怎么办呢?有什么方法可以恢复搜索功能?大部分情况下搜索功能失灵都是因为相关服务被禁用造成的,我们检查并开启对应服务就可以解决问题,大家一起来学习下吧. 具体方法如下: 1.首先进入控制面板; 2.点击"程序"; 3.点击"打开或关闭Windows功能"; 4.检查

win7开始菜单中的快速搜索功能怎么用

  了解一下Windows 7的"开始"菜单 很多用户对Windows 7的"开始"菜单还是有点陌生,我的朋友中有的只知道从开始菜单那里可以进入"计算机",可以进行"关机".但有多少人发现Windows 7的"开始"菜单里会有一个"搜索框"?发现的用户又有没有用过这个搜索功能? Windows 7"开始"菜单的"搜索框"搜索功能,搜索范围是整个电脑

电脑搜索功能不能用的解决方法

  某天,你发现电脑的搜索功能突然不能用了,这种情况出现的原因很多,比如:系统出现可疑程序时,我们会选择使用杀毒软件进行查杀,另外如果您使用超级兔子或windows优化大师等进行优化,也可能因为操作不当破坏搜索功能, 搜索功能用不了具体表现为: 在执行"搜索"功能后,系统弹出错误对话框,提示"无法找到运行搜索助理需要的一个文件.您可能需要运行安装."而后,"搜索助手"工具栏将显示一片空白. 电脑搜索功能不能用的解决方法 方法一:打开文件夹&quo

百度正式开放域名搜索功能

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 5月27日下午消息,易名中国论坛用户反映,百度搜索引擎日前正式开通域名搜索功能,只要在搜索框内输入任何一个域名,便可得出网络上有出现该域名的相关页面. 在域名搜索功能未开放之前,搜索网站域名,如果该网站被收录了,只会出现一条该网址的结果.导致用户对陌生域名的了解渠道很有限,无法得知更多的有关某域名其他信息. 随着互联网普及网民,越来越多的网民

基于jQuery实现页面搜索功能_jquery

jQuery实现页面搜索,搜索筛选用户输入的内容! HTML: <div class="table"> <table> <tr id="theader"> <th>姓名</th> <th>性别</th> <th>联系方式</th> </tr> <tr> <td>客服</td> <td>女</td