在学习过程之中经常用到各种词典发现再输入过程中有类似AutocompleteTextView的随着在EditText输入内容ListView动态变化的效果自己试着简单实现以下
实现这种效果主要用到的一个类TextWatcher以及一个EditText的监听器addTextChangedListener
实现代码:
public class DynSearchList_MainActivity extends Activity {
private ListView listView;
private MydbHelper dbHelper;
SQLiteDatabase databases;
private Cursor c;
private EditText editText;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dyn_search_list__main);
init();
//创建数据库
dbHelper= new MydbHelper(this);
//在EditText中监听输入变化
editText.addTextChangedListener(watcher);
//查询所有在ListView中显示
myQuery(null,null);
}
//注册组件
private void init()
{
listView =(ListView)findViewById(R.id.listView1);
editText= (EditText)findViewById(R.id.editText1);
}
//根据条件在数据库中模糊查询 并在ListView中显示
private void myQuery(String selection,String[] selectionArgs){
databases =dbHelper.getReadableDatabase();
c=databases.query(MydbHelper.TABLE_NAME, null, selection,selectionArgs , null, null,null);
SimpleCursorAdapter adapter = new SimpleCursorAdapter(getApplicationContext(),android.R.layout.simple_list_item_2, c,new String[]{MydbHelper.WORD,MydbHelper.CHINESE},new int[]{android.R.id.text1,android.R.id.text2});
listView.setAdapter(adapter);
}
//EditText中输入内容监视
//TextWatcher中重写的三个方法在EditText中每输入一个字符都执行一遍
TextWatcher watcher = new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
Log.d("=================", "onTextChanged is called!");
String selection = MydbHelper.WORD+" LIKE ?";
String[] selectionArgs= new String[]{s.toString()+"%"};
myQuery(selection,selectionArgs);
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
Log.d("===============", "beforTextChanged is called");
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
Log.d("=================", "afterTextChanged is called!");
}
};
}