Android 如何在Listview中添加搜索功能?
我的搜索栏有点问题。 我有一个应用程序在某些活动中有一个Listview,Listview中只有字符串。我想在此活动中添加搜索功能。 在过去的几天里,我在网上搜索了一些关于如何创建搜索栏的例子,我找到了很多关于如何创建搜索栏的指南和解释,它们都不能正确地在我的应用程序中工作,而且在大多数应用程序中,它们都没有解释在那里发生的事情背后的逻辑 是否有任何简单的指南/教程可以解释如何创建搜索栏(不管它是在操作栏上还是在布局中),从而将已经存在的字符串列表视图缩小为较小的列表?(例如,如果键入字母“a”,则会显示listview中包含字母“a”的所有字符串)Android 如何在Listview中添加搜索功能?,android,listview,searchbar,Android,Listview,Searchbar,我的搜索栏有点问题。 我有一个应用程序在某些活动中有一个Listview,Listview中只有字符串。我想在此活动中添加搜索功能。 在过去的几天里,我在网上搜索了一些关于如何创建搜索栏的例子,我找到了很多关于如何创建搜索栏的指南和解释,它们都不能正确地在我的应用程序中工作,而且在大多数应用程序中,它们都没有解释在那里发生的事情背后的逻辑 是否有任何简单的指南/教程可以解释如何创建搜索栏(不管它是在操作栏上还是在布局中),从而将已经存在的字符串列表视图缩小为较小的列表?(例如,如果键入字母“a”
提前谢谢 以下代码将帮助您筛选listView的内容
ArrayList<String> mListViewArrayList ; <----- which will be used to render data from getView Method
ArrayList<String> mOriginalList ; <----- Which holds original list all the time.
现在,在适配器中创建扩展筛选器的内部私有类:
私有类SearchFilter扩展了筛选器{
//Invoked in a worker thread to filter the data according to the constraint.
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
if (constraint != null && constraint.length() > 0) {
ArrayList<String> filterList = new ArrayList<FriendsModel>();
for (int i = 0; i < mOriginalList.size(); i++) {
if ((mOriginalList.get(i).toUpperCase())
.contains(constraint.toString().toUpperCase())) {
filterList.add(mOriginalList.get(i));
}
}
results.count = filterList.size();
results.values = filterList;
} else {
results.count = mOriginalList.size();
results.values = mOriginalList;
}
return results;
}
//Invoked in the UI thread to publish the filtering results in the user interface.
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint,
FilterResults results) {
mListViewArrayList = (ArrayList<String>) results.values;
notifyDataSetChanged();
}
}
我从哪里可以得到您创建的SearchFilter?mSearchFilter是哪个对象的参考?Anjali,非常感谢您的帮助,这段代码帮助了我,在我尝试通过web找到了这么多解决方案之后,thx!!
//Invoked in a worker thread to filter the data according to the constraint.
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
if (constraint != null && constraint.length() > 0) {
ArrayList<String> filterList = new ArrayList<FriendsModel>();
for (int i = 0; i < mOriginalList.size(); i++) {
if ((mOriginalList.get(i).toUpperCase())
.contains(constraint.toString().toUpperCase())) {
filterList.add(mOriginalList.get(i));
}
}
results.count = filterList.size();
results.values = filterList;
} else {
results.count = mOriginalList.size();
results.values = mOriginalList;
}
return results;
}
//Invoked in the UI thread to publish the filtering results in the user interface.
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint,
FilterResults results) {
mListViewArrayList = (ArrayList<String>) results.values;
notifyDataSetChanged();
}
}
ArrayList<String> mListViewArrayList ; <----- which will be used to render data from getView Method
ArrayList<String> mOriginalList ; <----- Which holds original list all the time.
et_userInput.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
yourAdapter.getFilter().filter(arg0);
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
}
@Override
public void afterTextChanged(Editable arg0) {
}
});