У меня есть текст для редактирования в виде строки поиска и представление списка, которое фильтрует набранный текст, но, к сожалению, оно не фильтрует представление списка. Я использовал адаптер адаптера массива с объектом Friend. У объекта друга есть имя, адрес и номер телефона , но я хочу только отфильтровать его имя. В моей деятельности ...
searchBarTextView.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
friendListAdapter.getFilter().filter(s);
}}
Находясь в адаптере ...
@Override
public Filter getFilter() {
Log.d(TAG, "begin getFilter");
if(newFilter == null) {
newFilter = new Filter() {
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
// TODO Auto-generated method stub
Log.d(TAG, "publishResults");
notifyDataSetChanged();
}</p>
<code> @Override
protected FilterResults performFiltering(CharSequence constraint) {
Log.d(TAG, "performFiltering");
constraint = constraint.toString().toLowerCase();
Log.d(TAG, "constraint : "+constraint);
List<ChatObject> filteredFriendList = new LinkedList<ChatObject>();
for(int i=0; i<friendList.size(); i++) {
Friend newFriend = friendList.get(i);
Log.d(TAG, "displayName : "+newFriend.getDisplayName().toLowerCase());
if(newFriend.getDisplayName().toLowerCase().contains(constraint)) {
Log.d(TAG, "equals : "+newFriend.getDisplayName());
filteredFriendList.add(newFriend);
}
}
FilterResults newFilterResults = new FilterResults();
newFilterResults.count = filteredFriendList.size();
newFilterResults.values = filteredFriendList;
return newFilterResults;
}
};
}
Log.d(TAG, "end getFilter");
return newFilter;
}
</code>
Может кто-нибудь помочь мне, как правильно отобразить адаптер отфильтрованного массива? Я думаю, что notifyDataSetChanged не вызывается. Спасибо.