`

android AutoCompleteTextView+ SQLite

阅读更多
android AutoCompleteTextView+ SQLite 数据库保存搜索记录

搜索中需要记录用户的搜索历史,以方便用户在下次搜索时快捷搜索。

思路:

使用SQLite作为用户输入的记录,当用户查询时从数据库中取出数据作为AutoCompleteTextView的数据源。

具体代码:

1.在main.xml 或者 自己定义的xml文件中 增加 AutoCompleteTextView

<AutoCompleteTextView android:id="@+id/search_text" android:layout_width="0dip"
   android:layout_height="wrap_content" android:layout_weight="1.0"
   android:layout_marginTop="6dip" android:layout_marginBottom="6dip"
   android:clickable="true" android:inputType="none"
   android:textSize="18sp" android:textStyle="normal"
   android:textColor="@android:color/primary_text_light"
   android:textColorHint="@color/search_hint" />

2.数据库操作,这里可以写你自己具体的数据库操作,下面是我的代码

public class Complete_Db {

 public static SQLiteDatabase db;
 public static String filepath;
 public static void CreateDB(String dbName,Context context){
  filepath = context.getFilesDir().toString()+"/"+dbName;
  db = SQLiteDatabase.openOrCreateDatabase(filepath, null);
 }
 public static boolean Insert(String name){
  boolean result = false;
  try{
  System.out.println("db state:"+db.isOpen());
  if(!db.isOpen())
   db.openOrCreateDatabase(filepath, null);
  ContentValues value = new ContentValues();
  value.put("name", name);
  db.insertOrThrow("input", null, value);
//  db.execSQL("insert into input values(null,?)",new String[]{name});
  }catch(SQLException e){
   e.printStackTrace();
   db.execSQL("create table input(id integer primary key autoincrement,name varchar(100))");
   ContentValues value = new ContentValues();
   value.put("name", name);
   db.insertOrThrow("input", null, value);
//   db.execSQL("insert into input values(null,?)",new String[]{name});
  }
  finally{
   Log.i("insert into db",name);
  }
  return result;
 }
 public static Cursor Query(String query){
  
  if(query != null){
   try{
    if(!db.isOpen())
     db.openOrCreateDatabase(filepath, null);
    String selection = "name like \'" + query +"%\'";
             return db.query("input",new String[]{"name"}, selection, null, null, null, null);
   }
   catch(SQLException e)
   {
    db.execSQL("create table input(id integer primary key autoincrement,name varchar(100))");
    String selection = "name like \'" + query +"%\'";
             return db.query("input",new String[]{"name"}, selection, null, null, null, null);
   }
   
  }
  else
   return null;
 }
 public static void Close(){
  if(db!=null && db.isOpen())
   db.close();
 }
 public static void Clear(){
  //清空搜索数据库
  
  try{
  if(!db.isOpen())
   db.openOrCreateDatabase(filepath, null);
  db.execSQL("delete * from input");
  }catch(SQLException e){
   e.printStackTrace();
  }
 }
}

3.在Activity 中调用

AutoCompleteTextView  searchText = (AutoCompleteTextView)findViewById(R.id.search_text);

Complete_Db.CreateDB("search.db", SearchActivity.this);
     List<String> search_hint = new ArrayList<String>();
  System.out.println("query string :"+searchText.getText().toString().trim());
   Cursor cursor = Complete_Db.Query(searchText.getText().toString().trim());
    cursor.moveToFirst();
  while(cursor.isAfterLast() == false){
   Log.i("query result",cursor.getString(0));
   search_hint.add(cursor.getString(0));
   cursor.moveToNext();
  }
      
    search_hint.add("清除历史");//用于清除历史记录
    String hints[] = new String[search_hint.size()];
    search_hint.toArray(hints);
    ArrayAdapter<String> adapter= new ArrayAdapter<String>(
            SogouSearchActivity.this, R.layout.auto_complete_list,hints);
        for(int i=0;i<hints.length;i++){
         System.out.println("db string:"+hints[i]);
        }

          searchText.setAdapter(adapter);
          cursor.close();
          searchText.setThreshold(1);
          searchText.setOnItemClickListener(new OnItemClickListener() {

     public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
       long arg3) {
      // TODO Auto-generated method stub
      if(searchText.getText().toString().equals("清除历史")){
       Log.i("touch clear","history");
       Complete_Db.Clear();
       searchText.setText(null);
      }
     }
   });

   另外需要增加一个事件,用于监听当输入改变时从数据库中取数据:

 searchText.addTextChangedListener(new TextWatcher() {

            public void afterTextChanged(Editable s) {
                // TODO Auto-generated method stub
                List<String> search_hint = new ArrayList<String>();   
          System.out.println("query string :"+searchText.getText().toString().trim());
          Cursor cursor = Complete_Db.Query(searchText.getText().toString().trim());
          cursor.moveToFirst();
          while(cursor.isAfterLast() == false){
           Log.i("query result",cursor.getString(0));
           search_hint.add(cursor.getString(0));
           cursor.moveToNext();
          }
                 search_hint.add("清除历史");
            String hints[] = new String[search_hint.size()];
            search_hint.toArray(hints);
            ArrayAdapter<String> adapter= new ArrayAdapter<String>(
                    SogouSearchActivity.this, R.layout.auto_complete_list,hints);
                for(int i=0;i<hints.length;i++){
                 System.out.println("db string:"+hints[i]);
                }
                  searchText.setAdapter(adapter);
            }

            public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {
                // TODO Auto-generated method stub
            }
 
            public void onTextChanged(CharSequence s, int start, int before,
                    int count) {
                    Log.i("text",s.toString());
                // TODO Auto-generated method stub
            }
          });

 


 @Override
    public void onDestroy(){
     super.onDestroy();
     Complete_Db.Close();
    }

 

分享到:
评论

相关推荐

    AutoCompleteTextView输入汉字拼音首字母实现过滤提示(支持多音字)

    AutoCompleteTextView具有输入提示的功能,但是它的这种提示不适合对股票列表的过滤,如果你玩过股票软件,就会知道只要输入股票名称的首字母或股票代码就会出现符合匹配的股票,这种过滤怎么实现呢? 还有个问题,...

    autoCompleteTextView

    autoCompleteTextView自定义BaseAdapter,实现下拉单的自定义样式,用sqlite数据库存放历史记录,进行写入时提示。点击某个下拉单写入autoCompleeTextView中。

    Android入门到精通源代码.

    4.2.8 自动完成文本框视图(AutoCompleteTextView) 4.2.9 日期选择器(DatePicker) 4.2.10 时间选择器(TimePicker) 4.2.11 数字时钟(DigitalClock) 4.2.12 表状时钟(AnalogClock) 4.2.13 进度条...

    android开发入门与实战(下)

    8.4 打造自己的数据库存储——SQLite存储方式 8.4.1 Android中对数据库操作 8.4.2 完整地操作数据库——日记本实例 8.5 我的数据你来用——ContentProvider介绍 8.5.1 初识ContentProvider 8.5.2 使用...

    android开发入门与实战(上)

    8.4 打造自己的数据库存储——SQLite存储方式 8.4.1 Android中对数据库操作 8.4.2 完整地操作数据库——日记本实例 8.5 我的数据你来用——ContentProvider介绍 8.5.1 初识ContentProvider 8.5.2 使用...

    Android Google 手机程序设计教程

    6.2.2AutoCompleteTextView 6.3 圖片相關元件 6.4 資料綁定元件 . 6.5XML 屬性的設定 6.6 統一的風格元件 第 7 章事件處理 7.1 事件處理的基本概念 7.2 按鈕事件 7.3 滑鼠事件 7.4 鍵盤事件 7.5 時間事件 ...

    《Google Android开发入门与实战》.pdf

    8.4 打造自己的数据库存储——sqlite存储方式 141 8.4.1 android中对数据库操作 141 8.4.2 完整地操作数据库——日记本实例 147 8.5 我的数据你来用——contentprovider介绍 155 8.5.1 初识...

    疯狂Android讲义源码

     2.4.1 自动完成文本框(AutoCompleteTextView)的  功能和用法 79  2.4.2 Spinner的功能和用法 80  2.4.3 日期、时间选择器(DatePicker  和TimePicker)的功能和用法 83  2.4.4 进度条(ProgressBar)的  ...

    Google.Android开发入门与实战

    7.3.8 自动完成文本(AutoCompleteTextView) 7.3.9 日期选择器(DatePicker)介绍与应用 7.3.10 时间选择器(TimePicker)介绍与应用 7.3.11 滚动视图(ScrollView)介绍与应用 7.3.12 进度条(ProgressBar)介绍与应用 7.3....

    android知识大总结【邯院】

    第9章 AutoCompleteTextView提示输入建议 48 第10章 RatingBar评分组件 50 Android进阶讲课流程2.doc; 1. 广播接收者 3 2. 服务Service 7 3. AsyncTask异步处理任务 15 4. 音频播放 20 8. 视频播放 26 9. 使用...

    疯狂Android讲义(第2版)源代码 第6章~第9章

    2.4、高级界面组件:AutoCompleteTextView; Spinner; DatePicker、TimePicker; ProgressBar; SeekBar; RatingBar; TabHost; ScrollView; ListView、ListActivity; ExpandableListView; GridView、...

    Google Android开发入门与实战的代码

    7.3.8 自动完成文本(AutoCompleteTextView ) 87 7.3.9 日期选择器(DatePicker)介绍与应用 89 7.3.10 时间选择器(TimePicker)介绍与应用 90 7.3.11 滚动视图(ScrollView)介绍与应用 91 7.3.12 进度条...

    Android实例代码

    2.4、高级界面组件:AutoCompleteTextView; Spinner; DatePicker、TimePicker; ProgressBar; SeekBar; RatingBar; TabHost; ScrollView; ListView、ListActivity; ExpandableListView; GridView、ImageSwitcher;...

    Android典型技术模块开发详解

    7.10 AutoCompleteTextview(自动完成) 7.11 DataPicker&TimePicker;(日期&时间) 7.12 ProgressBar (进度条) 7.12.1 横向进度条 7.12.2 旋转型进度条 7.13 SeekBar (拖动条) 7.14 RatingBar(评分条) 7.15 本章...

    Android应用基础实验指导书.doc

    Android中有许多常用控件(简单分类): 文本框:TextView、EditText 按钮:Button、RadioButton、RadioGroup、CheckBox、ImageButton 列表:List、ExpandableListView、Spinner、AutoCompleteTextView、GridView、 ...

    疯狂Android讲义.part2

    2.4.1 自动完成文本框(AutoCompleteTextView)的 功能和用法 79 2.4.2 Spinner的功能和用法 80 2.4.3 日期、时间选择器(DatePicker 和TimePicker)的功能和用法 83 2.4.4 进度条(ProgressBar)的 功能和用法 85 ...

    疯狂Android讲义.part1

    2.4.1 自动完成文本框(AutoCompleteTextView)的 功能和用法 79 2.4.2 Spinner的功能和用法 80 2.4.3 日期、时间选择器(DatePicker 和TimePicker)的功能和用法 83 2.4.4 进度条(ProgressBar)的 功能和用法 85 ...

    a-computer-engineer:我的博客A Android工程师的Android源代码集合-Source code collection

    在Android中填充和操作AutoCompleteTextView( ) 在Whatsapp中为Android中的给定号码打开聊天页面( ) 在Kotlin Android的RecyclerView中显示图像网格( ) Android中具有CRUD操作的Room SQLite演示( ) ...

Global site tag (gtag.js) - Google Analytics