我正在尝试在列表视图上执行搜索操作。当我输入我的列表中不存在的字符或字符串时,我的代码完美地工作(即它没有显示任何内容,因为没有找到匹配)但是,当我输入列表中存在的名称时,无论在哪个位置name存在我的代码只显示列表视图中的第一条记录。这是我的搜索操作代码:
NameListAdapter = new MyAdapter(this,
android.R.layout.simple_list_item_1,NameArrayList
);
lvSearch.setAdapter(NameListAdapter);
editTextSearch.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
NameListAdapter.getFilter().filter(cs);
}
@Override
public void beforeTextChanged(CharSequence cs, int arg1, int arg2,
int arg3) {
}
@Override
public void afterTextChanged(Editable cs) {
}
});
请尽快帮助。谢谢你
答案 0 :(得分:0)
我解决了这个问题,而不是使用系统过滤器,我使用自己的过滤器进行搜索。我的代码中进行了以下更改:
@Override
public void onTextChanged(CharSequence cs, int arg1, int arg2,
int arg3) {
String text = edSearch.getText().toString();
NameListAdapter.filter(text);
}
并添加了此过滤器方法:
// Filter method for search
public void filter(String charText) {
charText = charText.toLowerCase(Locale.getDefault());
NameArrayList.clear();
int j;
if (charText.length() == 0) {
NameArrayList.addAll(arrayList);
}
else
{
NameArrayList.clear();
for (j=0;j<arrayList.size();j++)
{
if(arrayList.get(j).toLowerCase(Locale.getDefault()).contains(charText))
{
NameArrayList.add((arrayList.get(j)));
}
}
}
notifyDataSetChanged();
}
答案 1 :(得分:0)
我没有创建这种耗时的过滤方法。 。NameListAdapter.getFilter()过滤器(CS);如果NameArrayList是ArrayAdapter的类型,它也将起作用。
感谢。