我有一个EditText和下面的一个ListView,现在如果需要搜索,就根据EditText中的文本更新ListView。ListView的值存储在ArrayList中。
我有一个EditText和下面的一个ListView,现在如果需要搜索,就根据EditText中的文本更新ListView。ListView的值存储在ArrayList中。
et_artists_searchWord.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
// TODO Auto-generated method stub
List<AdapterDTOArtist> list = filter(s.toString(),
mAdapterDTOsBackup, true);
mAdapterDTOs.clear(); // <--- clear the list before add
mAdapterDTOs.addAll(list); // <--- here is the double add if
// you// do not clear before
mLazyAdatper.setDataSet(mAdapterDTOs);
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
});
在onCreate方法之外搜索方法:
public static List<AdapterDTOArtist> filter(String string,
Iterable<AdapterDTOArtist> iterable, boolean byName) {
if (iterable == null)
return new LinkedList<AdapterDTOArtist>();
else {
List<AdapterDTOArtist> collected = new LinkedList<AdapterDTOArtist>();
Iterator<AdapterDTOArtist> iterator = iterable.iterator();
if (iterator == null)
return collected;
while (iterator.hasNext()) {
AdapterDTOArtist item = iterator.next();
// if(item.getmTag_Name().startsWith(string))
if (item.getmTag_Name().toLowerCase().startsWith(string)){
// if
// (item.getmTag_Name().toLowerCase(Locale.getDefault()).contains(string))
collected.add(item);
}
else if(item.getmTag_Name().toUpperCase().startsWith(string)){
collected.add(item);
}
}
return collected;
}
}
ArrayAdapter
,则可以使用adapter.getFilter().filter(...)
进行过滤。 - Gopal Gopi