【android】EditText监听,根据输入内容查询数据并动态更新ListView

EditText监听,根据输入内容查询数据并动态更新ListView

Email:[email protected]


电话簿里有一个很实用的功能,就是根据姓名或者电话号码搜索联系人;很多网站或者软件有回复、评论、注册等功能,会限制输入字数,每当用户输入一个字数字后,会动态显示已经输入的字数或者剩余还能输入多少数字。在android系统里,我们可以通过对EditText进行监听,如果内容发生了改变就执行某项操作就行。

  • 环境

IDE:Android Studio

JDK:1.8

系统:win7 64位

  • 声明:

1)我查询数据和适配器是CursorSimpleCursorAdapter

2)关于ListView显示数据和动态更新可戳这里《Cursor记录集游标、ListView和SimpleCursorAdapter、ListView数据动态更新

  • 步骤1:在Activity(继承ListActivity)中增加全局变量

private AddressDAO addressDAO;//操作数据库的类
private SimpleCursorAdapter adapter;//适配器
private Cursor cursor;//记录集游标
private EditText searchText;//搜索栏
private String condition;//查询条件

  • 步骤2:在onCreate中为搜索栏添加监听事件
//需要先导入
import android.text.TextWatcher;
//然后添加监听事件
searchText = (EditText)findViewById(R.id.search);
searchText.addTextChangedListener(textWatcher);

  • 步骤3:监听事件
TextWatcher textWatcher = new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            //Toast.makeText(ShowAddressActivity.this,"beforeTextChanged ",Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            //Toast.makeText(ShowAddressActivity.this,"onTextChanged ",Toast.LENGTH_SHORT).show();
        }

        @Override
        public void afterTextChanged(Editable s) {
            //Toast.makeText(ShowAddressActivity.this,"afterTextChanged ",Toast.LENGTH_SHORT).show();
            condition = searchText.getText().toString();
            try{
            cursor = addressDAO.conditionQuery(condition);
            adapter.changeCursor(cursor);
            }catch(Exception e){}
           // new RefresListR().execute();
        }
    };

  • 声明:adapter.changeCursor(Cursor)相当于通知适配器当前的数据集cursor已经改变了,需要刷新ListView了

  • 步骤4:查询数据,才数据库操作类中增加查询函数

//查询数据:返回的是一个Cursor对象
    public Cursor conditionQuery(String condition)
    {
        String sql;
        if(condition.length()>0||!"".equals(condition))
        {
            sql = "select * from people where name like '%"+condition+"%' or phone like '%"+condition+"%'";
        }else
        {
            sql = "select * from people";
        }
        //获取SQLiteDatabase对象实例
        db = this.getReadableDatabase();
        Cursor cursor = db.rawQuery(sql, null);
        return cursor;
    }


通过上面4个步骤,基本可以完成在搜索栏根据输入的文字进行条件查询,亲测了一下。当然可能数据过多的时候,采用这个方法可能会造成读取时间长的问题,那么最好可以使用后台线程读取数据库,可参考《Cursor记录集游标、ListView和SimpleCursorAdapter、ListView数据动态更新》。


初学者个人理解,难免有误,欢迎指正。

你可能感兴趣的:(android,android,sqlite,Studio)