AutoCompleteTextView 与sqlite绑定实现记住用户输入的内容并自动提示
把用户输入的内容保存到数据库表中,然后用户输入时,进行模糊查询并把查询结果附到AutoCompleteTextView中。
1:activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" > <AutoCompleteTextView
android:id="@+id/actValue"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:completionThreshold="1"
android:singleLine="true"/> <Button
android:id="@+id/btnClick"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Click"/> </LinearLayout>
2:DbUtil.java
package com.example.autotest; import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper; public class DbUtil extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 10; //当前数据库版本
private static final String DATABASE_NAME = "wzh.db"; private static final String TABLE_AUTO = "auto"; //国税邮件表 private static final String CREATE_TABLE_AUTO_SQL = "create table " +
TABLE_AUTO + "( _id integer primary key autoincrement, "+
" value varchar)"; public DbUtil(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
} /*
* 数据库第一次被创建时调用onCreate
*/
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_TABLE_AUTO_SQL);
} /*
* 如果 DATABASE_VERSION 改变 系统会调用onUpgrade
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("drop table if exists " + TABLE_AUTO); onCreate(db);
}
}
3:DBManager.java
package com.example.autotest; import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase; public class DBManager {
private DbUtil dbUtil = null;
private SQLiteDatabase db = null; public DBManager(Context context){
dbUtil = new DbUtil(context);
db = dbUtil.getWritableDatabase();
} public boolean valueExist(String value){
int count = 0;
Cursor c = db.rawQuery("select _id from auto where value = ?",
new String[]{value});
if(c.moveToNext()){
count = c.getInt(c.getColumnIndex("_id"));
}
c.close();
return count>0?true:false;
} public void addAutoValue(String value){
if(value!=null && value.length()>0){
db.beginTransaction();
try{
String sql = "insert into auto(_id,value) values(null,?)";
db.execSQL(sql, new Object[]{value});
db.setTransactionSuccessful();
}finally{
db.endTransaction();
}
}
} public Cursor selectAutoValues(String value){
String sql = "select _id,value from auto where value like ? limit 10";
Cursor c = db.rawQuery(sql, new String[]{"%"+value+"%"});
return c;
} /**
* 关闭数据连接资源
*/
public void dbClose(){
if(null != db){
db.close();
}
}
}
4:AutoCompleteAdater.java
package com.example.autotest; import android.content.Context;
import android.database.Cursor;
import android.widget.SimpleCursorAdapter; public class AutoCompleteAdater extends SimpleCursorAdapter{
private DBManager dbManager = null;
private Context context; // 查询字段
private String value; @SuppressWarnings("deprecation")
public AutoCompleteAdater(Context context, int layout, Cursor c,String from, int to) {
super(context, layout, c, new String[] { from },new int[] { to });
this.context = context;
this.value = from;
} /**
* 动态查询数据库
*/
@Override
public Cursor runQueryOnBackgroundThread(CharSequence constraint) {
if (constraint != null) {
return getDbManager().selectAutoValues((String) constraint);
} else {
return null;
}
} /**
* 这里设置在弹出的提示列表中点击某一项后的返回值,返回值将被显示在文本框中
*/
@Override
public CharSequence convertToString(Cursor cursor) {
return cursor.getString(cursor.getColumnIndex(value));
} public DBManager getDbManager(){
return dbManager==null?new DBManager(this.context):dbManager;
}
}
5:MainActivity.java
package com.example.autotest; import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AutoCompleteTextView;
import android.widget.Button; public class MainActivity extends Activity {
private AutoCompleteTextView actValue = null;
private Button btnClick = null;
private DBManager dbManager = null; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); actValue = (AutoCompleteTextView) findViewById(R.id.actValue);
btnClick = (Button)findViewById(R.id.btnClick); AutoCompleteAdater cursorAdapter = new AutoCompleteAdater(
this,
android.R.layout.simple_dropdown_item_1line,
null,
"value",
android.R.id.text1
);
actValue.setAdapter(cursorAdapter); dbManager = new DBManager(this); btnClick.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
String value = actValue.getText().toString();
dbManager.addAutoValue(value);
}
});
} @Override
protected void onDestroy() {
super.onDestroy();
if(dbManager!=null){
dbManager.dbClose();
}
}
}
java.lang.Object | ||||
↳ | android.view.View | |||
↳ | android.widget.TextView | |||
↳ | android.widget.EditText | |||
↳ | android.widget.AutoCompleteTextView |
可以看出AutoCompleteTextView继承自EditText,所以它实际上也是一个文本编辑框,只是多了一个自动提示补全功能,EditText的所有功能AutoCompleteTextView都能实现,其对EditTextAPI进行了丰富。
AutoCompleteTextView 与sqlite绑定实现记住用户输入的内容并自动提示的更多相关文章
- jquery+php实现用户输入搜索内容时自动提示
index.html <html> <head> <meta charset=;} #search_auto li a:hover{background:#D8D ...
- js打印保存用户输入的内容
在用js打印局部页面时,遇到用户新输入的内容没能打印出来,经过观察,发现我采用的js打印方法是读取页面源代码,而用户输入的内容如果不将其写入到页面源代码中去,是打印不出来的,下面是我的解决方法: // ...
- 大量无线键盘存在KeySniffer漏洞-可嗅探用户输入的内容
几美元的一根天线.一个无线发射器,还有几行Python代码,有了这些,黑客就可以在几十米开外主动地记录下你的用户名.密码.信用卡.你写的稿子,总之就是你用无线键盘输入的任何东西. 黑客所利用的是一种无 ...
- 【Android工具类】用户输入非法内容时的震动与动画提示——EditTextShakeHelper工具类介绍
转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 当用户在EditText中输入为空或者是数据异常的时候,我们能够使用Toast来提醒用户,除此之外,我们还能 ...
- SQL Server 2008 r2 输入SQL语句不能自动提示的解决办法
先利用“配置工具-SQL Server 配置管理器”关闭所有MSSQLSERVER服务,利用SQL Server Installation Center,进入Maintenance,选择Repair, ...
- 防御XSS攻击-encode用户输入内容的重要性
一.开场先科普下XSS 跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS.恶 ...
- mailto实现将用户在网页中输入的内容传递到本地邮件客户端
背景: 想在自己的网站中有这样一个设计: 用户点击提交按钮之后,就会打开本地邮件客户端,并自动将他在输入框中输入的内容作为邮件的内容,像下面这样: mailto可以帮助实现这个功能. 简介: mail ...
- Python学习【第四篇】用户输入及判断
用户输入: 例1.写一个用户输入密码的小程序,流程如下: 1.用户输入自己的用户名 2.打印"Hello+用户名" #!/usr/bin/env python #name = ra ...
- 微信小程序 获得用户输入内容
在微信小程序里,如何获得用户输入的内容?? js: document.getElementById("Content").value jq:$("#Content&quo ...
随机推荐
- cf D. Xenia and Hamming
http://codeforces.com/contest/357/problem/D 题意:给你两个数n和m,表示两个字符串的循环次数,然后给出两个字符串,求出其相同位置字符不同的个数. 先求出两个 ...
- MVC4.0系统开发新手历程(三)---数据导入计算
数据导入计算 数据的重要意义就不需要我多说了吧,本项目中的数据来源是来自荆艺系统(熟悉物流报关的朋友应该知道)导出的一张Excel,包含了一段时间内整个公司所有销售的全部记录,保密级别那是杠杠的, ...
- c#秒转时分秒
2个办法 @{ int hour = item.track / 3600; int min = (item.track - hour * 3 ...
- hdu 4512 吉哥系列故事——完美队形I_LCIS
题目链接 题意: 假设有n个人按顺序站在他的面前,他们的身高分别是h[1], h[2] ... h[n],吉哥希望从中挑出一些人,让这些人形成一个新的队形,新的队形若满足以下三点要 求,则就是新 ...
- java基础 二分查找算法
/* * 折半查找法: * 思路: * 定义三个变量记录查找范围中最大.最小和中间的索引值,每次都是使用中间索引值与要查找的目标进行对比,如果不符合,那么就不停缩小查找范围 * */ ...
- matlab遗传算法
function [xv,fv] = myGA(fitness, a, b, NP, NG, Pc, Pm, eps) % 用遗传算法求解一维无约束优化问题 % % 待优化的目标函数 fitness ...
- 总结下java经常犯的错误
编写代码是一种艺术,认识错误是我们代码改进的重要途径之一.以下情况并非大家都能碰到过,但希望提高代码质量的人都引以为戒.以下各种情况,都是初学者经常犯的错误. 1.1 字符串没有判断是否为 ...
- iOS中自动释放问题?
--前言:iOS开发中关于对象的释放问题,虽然知道规则,但总不清楚自动释放的对象什么时候彻底消失?它存在的多久?什么情况会消失?都不清楚,每次用自动释放对象,总有点心虚的感觉,以下是一些例子.研究. ...
- IE常见的CSS的BUG(一)
2011年6月,我毕业了.2012年我接触了CSS,本以为会好过些能赚点钱了,可谁知,Internet Explorer(下称IE),这个前端工程师的噩梦浏览器让我不再那么好过了.各种出现在IE身上的 ...
- [Cycle.js] The Cycle.js principle: separating logic from effects
The guiding principle in Cycle.js is we want to separate logic from effects. This first part here wa ...