实时搜索在 android 列表视图中无法正常工作
Live Search is not working properly in android listview
我正在尝试对我的列表视图执行搜索操作。当我键入列表中不存在的字符或字符串时,我的代码可以完美运行(即它不显示任何内容,因为未找到匹配项)但是,当我输入列表中存在的名称时,无论在什么位置名称存在 我的代码仅显示列表视图中的第一条记录。这是我的搜索操作代码:
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) {
}
});
请帮助asap.Thank你
我解决了这个问题,而不是使用系统过滤器,而是使用我自己的过滤器进行搜索。我的代码进行了以下更改:
@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();
}
我已经做了同样的事情而没有创建这种耗时的过滤方法。
NameListAdapter.getFilter().过滤器(cs);如果 NameArrayList 是 ArrayAdapter 类型,也将有效。
谢谢。
我正在尝试对我的列表视图执行搜索操作。当我键入列表中不存在的字符或字符串时,我的代码可以完美运行(即它不显示任何内容,因为未找到匹配项)但是,当我输入列表中存在的名称时,无论在什么位置名称存在 我的代码仅显示列表视图中的第一条记录。这是我的搜索操作代码:
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) {
}
});
请帮助asap.Thank你
我解决了这个问题,而不是使用系统过滤器,而是使用我自己的过滤器进行搜索。我的代码进行了以下更改:
@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();
}
我已经做了同样的事情而没有创建这种耗时的过滤方法。 NameListAdapter.getFilter().过滤器(cs);如果 NameArrayList 是 ArrayAdapter 类型,也将有效。
谢谢。