`

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+SQLite实现自动检索

    在Android开发中,`AutoCompleteTextView` 是一个非常实用的组件,它允许用户在输入时自动显示匹配的建议列表,极大地提高了用户体验。结合SQLite数据库,我们可以实现高效、动态的数据检索,为用户提供实时的搜索...

    Android中AutoCompleteTextView的使用步骤.pdf

    AutoCompleteTextView是Android开发中一个常用的UI组件,它在用户输入文本时提供自动补全功能,极大地提高了用户体验。本文将详细介绍如何在Android中使用AutoCompleteTextView。 1. **AutoCompleteTextView的基本...

    使用autoCompleteTextView读取历史记录

    在Android开发中,`AutoCompleteTextView` 是一个非常实用的组件,它允许用户在输入时自动显示匹配的建议列表,通常用于实现搜索框或者输入补全功能。`AutoCompleteTextView` 结合历史记录功能,可以提供更加人性化...

    安卓搜索相关相关-利用Sqlite模糊查询实现搜索框的自动补全效果支持字母汉字补全.rar

    SQLite是Android系统内置的关系型数据库,适合用于存储和检索应用中的数据。 1. **SQLite数据库简介** SQLite是一个轻量级的、开源的嵌入式SQL数据库引擎,它不需要单独的服务器进程,并且支持多种编程语言。在...

    2011.09.07(5)——— android 跨进程通信之content provider + AutoCompleteTextView

    Content Provider是Android系统中数据共享的标准接口,它允许不同的应用访问存储在SQLite数据库、文件系统或者其他任何形式的数据。创建一个Content Provider需要实现以下几个关键类和方法: 1. **Provider类**:这...

    AutoCompleteTextView和自定义的CursorAdapter

    在Android开发中,`AutoCompleteTextView` 是一个非常实用的组件,它提供了自动补全功能,用户在输入时可以根据预设的数据集得到建议的匹配项。这篇文章将深入探讨`AutoCompleteTextView` 的工作原理以及如何结合...

    AutoCompleteTextViewDemo

    AutoCompleteTextView是Android平台上一种非常实用的UI组件,主要用于实现自动补全或建议输入的功能。在给定的项目“AutoCompleteTextViewDemo”中,我们主要关注如何利用这个组件来展示历史记录,使得用户在输入时...

    AutoCompleteTextView自动匹配字符

    AutoCompleteTextView是Android开发中一个常用的UI组件,它在用户输入文本时提供自动补全功能,极大地提高了用户体验。这个组件属于Android的android.widget包,继承自EditText,因此它具有文本编辑的基本功能,同时...

    autoCompleteTextView

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

    AutoCompleteTextView实现历史记录功能

    AutoCompleteTextView是Android系统提供的一种可以自动补全的文本输入控件,常用于搜索框或者输入框中,为用户提供方便的输入建议。在Android开发中,我们常常会遇到需要为用户保存并显示历史搜索记录的功能,这个...

    Android电子词典.rar

    此项目的核心在于利用Android SDK进行编程,结合SQLite数据库存储词汇信息,实现用户对单词的查找功能。 一、Android开发基础 在Android电子词典项目中,开发者需要掌握Android应用的基本架构,包括Activity、...

    Android_File_IO.zip_android_edittext

    4. **SQLite数据库**:除了文件系统,Android还提供SQLite数据库来存储结构化数据。使用`SQLiteOpenHelper`类来创建、升级数据库,通过`SQLiteCursor`查询数据,`SQLiteDatabase`进行增删改操作。 5. **...

    android 源码 电子词典

    在Android平台上,开发一款电子词典应用涉及到许多技术细节,其中关键部分是通过CursorAdapter将数据源(通常是数据库查询结果)绑定到用户界面组件,如ListView或AutoCompleteTextView。本项目着重介绍了如何利用...

    Android学习之实现带自动补全与历史记录的自定义搜索框

    总结,实现一个带有自动补全和历史记录功能的自定义搜索框,需要结合AutoCompleteTextView、适配器、SQLite数据库以及可能的网络请求。通过这种方式,我们可以创建一个高效且用户友好的搜索体验,提升应用程序的价值...

    AutocompleteTest_Android.rar

    综上所述,"AutocompleteTest_Android"可能是一个演示或测试自动补全功能的Android项目,通过`AutoCompleteTextView`展示了如何集成、配置和自定义自动补全功能。在实际开发中,开发者可以根据需求灵活调整,以满足...

    AutoCompleteTextView配合ResourceCursorAdapter

    在Android开发中,`AutoCompleteTextView` 是一个非常实用的组件,它允许用户在输入时自动显示匹配的建议列表。这个功能通常用于实现搜索框或者填充表单时提供下拉选项,极大地提升了用户体验。本篇将详细介绍如何...

    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火车购票系统登录页面

    为了增加用户体验,可以添加自动完成提示(AutoCompleteTextView)来帮助用户快速填充信息。同时,提供“记住密码”和“自动登录”的选项也是常见的设计。 按钮(Button)用于触发登录操作,可以设置点击事件监听器...

    Android天气查询App

    这可能涉及到一个城市数据库或者搜索建议服务,需要实现UI组件,如Spinner或AutoCompleteTextView,以便用户进行交互。 6. **数据显示**: 获取到天气信息后,需要将其显示在界面上。这涉及到Android的UI组件,如...

    android 仿京东商城app

    Android中的搜索框通常与AutoCompleteTextView结合,提供自动补全功能。此外,还需要实现搜索历史记录的存储和加载,以及根据关键词对商品进行实时筛选。 购物车管理涉及到添加商品、修改数量、删除商品、计算总价...

Global site tag (gtag.js) - Google Analytics