在Android开发中会用到搜索框EditText,通过对编辑框进行监听,动态显示出想要的数据,实现数据的过滤。
具体关键代码如下:(只贴出主要代码片段,其中adapter为通用写法,可以自己去实现)
package com.jingchen.tbviewer.ui;
import java.util.ArrayList;
import java.util.List;
import com.jingchen.tbviewer.R;
import com.jingchen.tbviewer.adapter.MyAdapter;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.Window;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
public class DataFilterActivity extends Activity{
private EditText edData;
private ListView lvData;
private List<String>list;
private List<String>newList;
private MyAdapter myAdapter;
private String keyWords;
@SuppressLint("HandlerLeak")
private Handler mHandler=new Handler(){
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case 0:
myAdapter=new MyAdapter(DataFilterActivity.this, list);
myAdapter.notifyDataSetChanged();
lvData.setAdapter(myAdapter);
break;
case 1:
keyWords=edData.getText().toString().trim();
// 此处需要再new一个新的list出来,此时引用已发生变化,区别原始数据
newList=findData(keyWords);
myAdapter=new MyAdapter(DataFilterActivity.this, newList);
myAdapter.notifyDataSetChanged();
lvData.setAdapter(myAdapter);
break;
case 2:
if(newList.size()>0){
newList.clear();
}
myAdapter=new MyAdapter(DataFilterActivity.this, list);
myAdapter.notifyDataSetChanged();
lvData.setAdapter(myAdapter);
break;
default:
break;
}
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_datafilter);
initView();
insertData();
}
private void initView() {
list=new ArrayList<String>();
newList=new ArrayList<String>();
edData=(EditText) findViewById(R.id.ed_filterData);
lvData=(ListView) findViewById(R.id.lv_data);
edData.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
//
//
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
}
@Override
public void afterTextChanged(Editable s) {
if(s.length()==0){
Toast.makeText(DataFilterActivity.this,"输入框为空", Toast.LENGTH_SHORT).show();
mHandler.sendEmptyMessage(2);
}else{
mHandler.sendEmptyMessage(1);
}
}
});
}
private void insertData(){
for(int i=0;i<150;i++){
list.add("模拟数据第"+i+"项");
}
mHandler.sendEmptyMessage(0);
}
private List<String> findData(String keyWord){
List<String>myList=new ArrayList<String>();
int size= list.size();
for(int i=0;i<size;i++){
if(list.get(i).contains(keyWord)){
myList.add(list.get(i));
}
}
return myList;
}
}