从编辑文本中筛选列表视图

时间:2011-04-14 04:57:18

标签: android listview filter android-edittext

我有一个编辑文本作为搜索栏和一个列表视图,用于过滤我键入的文本但不幸的是,它不会过滤列表视图。我使用了对象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();
                }

@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; }

有人可以帮助我如何正确显示已过滤的阵列适配器吗?我认为不会调用notifyDataSetChanged。感谢。

1 个答案:

答案 0 :(得分:4)

我的问题已经解决,发现我必须覆盖 getCount() getItem()