Filter list view from edit text

10,052

My problem is solved, found out that I have to override getCount() and getItem().

Share:
10,052
iamtheexp01
Author by

iamtheexp01

Java, SQL...

Updated on June 04, 2022

Comments

  • iamtheexp01
    iamtheexp01 almost 2 years

    I have an edit text as a search bar and a list view that filters the text that I typed but unfortunately, it doesn't filter the list view. I have used an customize array adapter with object Friend. Friend object has name, address and phone number but I only want to filter its name. In my activity...

    searchBarTextView.addTextChangedListener(new TextWatcher() {
    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        friendListAdapter.getFilter().filter(s);
    }}
    

    While in adapter...

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

    Could someone please help me how to correctly show the filtered array adapter? I think the notifyDataSetChanged is not invoked. Thanks.

  • SemperFly
    SemperFly almost 13 years
    Thank you so much. My suspicious was that this was the culprit and this fixed my issue.
  • ninjaneer
    ninjaneer over 12 years
    could you explain how you override the getCount()? the Filter object doesn't have a count, but the FilterResults object does.
  • Dhaval Khant
    Dhaval Khant almost 12 years
    Can you send me link or any referense for listview filter in android