I had asked a similar kinda question a while back. Here: Filtering a ListView with Baseadapter  filters text not images. Although, my specific question concerned a GridView, the concept (and the code) can be substituted for a ListView.
NOTE: This will be a lengthy post but I think necessary for the sake of completeness (I am leaving out the imports though)
The main activity (Friends.java)
public class Friends extends SherlockActivity {
    // BUNDLE OBJECT TO GET DATA FROM EARLIER ACTIVITY
    Bundle extras;
    // INITIAL ALBUM ID AND NAME
    String initialUserID;
    // THE GRIDVIEW
    GridView gridOfFriends;
    // THE ADAPTER
    FriendsAdapter adapter;
    // ARRAYLIST TO HOLD DATA
    ArrayList<getFriends> arrFriends;
    // LINEARLAYOUT TO SHOW THE FOOTER PROGRESS BAR
    LinearLayout linlaProgressBar;
    // THE EDITTEXT TO FILTER USERS
    EditText filterText;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.friends_grid_list);
        extras = getIntent().getExtras();
        if (extras.containsKey("USER_ID"))  {
            initialUserID = extras.getString("USER_ID");
        } else {
            Toast.makeText(
                    getApplicationContext(), 
                    "There was a problem getting your Friends Data. Please hit the back button and try again.", 
                    Toast.LENGTH_SHORT).show();
        }
        ActionBar actionBar = getSupportActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);
        actionBar.setDisplayShowHomeEnabled(true);
        actionBar.setDisplayShowTitleEnabled(true);
        actionBar.setTitle("Your Friends");
        // CAST THE GRIDVIEW
        gridOfFriends = (GridView) findViewById(R.id.gridFriends);
        // INSTANTIATE THE ARRAYLIST
        arrFriends = new ArrayList<getFriends>();
        // CAST THE ADAPTER
        adapter = new FriendsAdapter(Friends.this, arrFriends);
        // CAST THE LINEARLAYOUT THAT HOLDS THE PROGRESS BAR
        linlaProgressBar = (LinearLayout) findViewById(R.id.linlaProgressBar);
        linlaProgressBar.setVisibility(View.GONE);
        // GET THE LOGGED IN USERS FRIENDS DATA
        if (initialUserID != null)  {
            new getFriendsData().execute();
        } else {
            Toast.makeText(
                    getApplicationContext(), 
                    "There was a problem getting your Friends Data. Please hit the back button and try again.", 
                    Toast.LENGTH_SHORT).show();
        }
        // CAST THE EDITTEXT AND SETUP FILTERING
        filterText = (EditText) findViewById(R.id.editFilterList);
        filterText.addTextChangedListener(filterTextWatcher);
    }
    private class getFriendsData extends AsyncTask<Void, Void, Void>    {
        @Override
        protected void onPreExecute() {
            // SHOW THE BOTTOM PROGRESS BAR (SPINNER) WHILE LOADING THE FRIENDS LIST
            linlaProgressBar.setVisibility(View.VISIBLE);
        }
        @Override
        protected Void doInBackground(Void... params) {
            try {
                String query = 
                        "SELECT name, uid, pic_big " +
                        "FROM user " +
                        "WHERE uid in " +
                        "(SELECT uid2 FROM friend WHERE uid1=me()) " +
                        "order by name";
                Bundle paramGetFriendsList = new Bundle();
                paramGetFriendsList.putString("method", "fql.query");
                paramGetFriendsList.putString("query", query);
                String resultFriendsList = Utility.mFacebook.request(paramGetFriendsList);
                JSONArray JAFriends = new JSONArray(resultFriendsList);
                getFriends friends;
                if (JAFriends.length() == 0)    {
                } else {
                    for (int i = 0; i < JAFriends.length(); i++) {
                        JSONObject JOFriends = JAFriends.getJSONObject(i);
                        friends = new getFriends();
                        // SET FRIENDS ID
                        if (JOFriends.has("uid"))   {
                            friends.setFriendID(JOFriends.getString("uid"));
                        } else {
                            friends.setFriendID(null);
                        }
                        // SET FRIENDS NAME
                        if (JOFriends.has("name"))  {
                            friends.setFriendName(JOFriends.getString("name"));
                        } else {
                            friends.setFriendName(null);
                        }
                        // SET FRIENDS PROFILE PICTURE
                        if (JOFriends.has("pic_big"))   {
                            friends.setFriendProfile(JOFriends.getString("pic_big"));
                        } else {
                            friends.setFriendProfile(null);
                        }
                        arrFriends.add(friends);
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
        @Override
        protected void onPostExecute(Void result) {
            // SET THE ADAPTER TO THE GRIDVIEW
            gridOfFriends.setAdapter(adapter);
            // HIDE THE BOTTOM PROGRESS BAR (SPINNER) AFTER LOADING THE FRIENDS LIST
            linlaProgressBar.setVisibility(View.GONE);
        }
    }
    private TextWatcher filterTextWatcher = new TextWatcher() {
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            adapter.getFilter().filter(s.toString().toLowerCase());
            adapter.notifyDataSetChanged();
        }
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }
        @Override
        public void afterTextChanged(Editable s) {
        }
    };
}
The getFriends.java class for the ArrayList:
public class getFriends {
    String friendID;
    String friendName;
    String friendProfile;
    // SET FRIENDS ID
    public void setFriendID(String friendID) {
        this.friendID = friendID;
    }
    // GET FRIENDS ID
    public String getFriendID() {
        return friendID;
    }
    // SET FRIENDS NAME
    public void setFriendName(String friendName) {
        this.friendName = friendName;
    }
    // GET FRIENDS NAME
    public String getFriendName() {
        return friendName;
    }
    // SET FRIENDS PROFILE
    public void setFriendProfile(String friendProfile) {
        this.friendProfile = friendProfile;
    }
    // GET FRIENDS PROFILE
    public String getFriendProfile() {
        return friendProfile;
    }
}
And finally, the adapter class (FriendsAdapter.java)
public class FriendsAdapter extends BaseAdapter implements Filterable {
    ProgressDialog dialog;
    Activity activity;
    LayoutInflater inflater = null;
    ImageLoader imageLoader;
    ArrayList<getFriends> arrayFriends;
    List<getFriends> mOriginalNames;
    FriendsAdapter(Activity a, ArrayList<getFriends> arrFriends) {
        activity = a;
        arrayFriends = arrFriends;
        inflater = (LayoutInflater) activity
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        imageLoader = new ImageLoader(activity.getApplicationContext());
    }
    public int getCount() {
        return arrayFriends.size();
    }
    public Object getItem(int position) {
        return arrayFriends.get(position);
    }
    public long getItemId(int position) {
        return position;
    }
    @Override
    public void notifyDataSetChanged() {
        super.notifyDataSetChanged();
    }
    public View getView(final int position, View convertView, ViewGroup parent) {
        View vi = convertView;
        if (convertView == null)
            vi = inflater.inflate(R.layout.friends_grid_items, null);
        ImageView imgProfilePicture = (ImageView) vi.findViewById(R.id.imgProfilePicture);
        TextView txtUserName = (TextView) vi.findViewById(R.id.txtUserName);
        FrameLayout mainContainer = (FrameLayout) vi.findViewById(R.id.mainContainer);
        txtUserName.setText(arrayFriends.get(position).getFriendName());
        if (arrayFriends.get(position).getFriendProfile() != null) {
            imageLoader.DisplayImage(arrayFriends.get(position).getFriendProfile(),imgProfilePicture);
        } else if (arrayFriends.get(position).getFriendProfile() == null) {
            imgProfilePicture.setVisibility(View.GONE);
        }
        mainContainer.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent showFriendsProfile = new Intent(activity.getApplicationContext(), UserProfileNew.class);
                showFriendsProfile.putExtra("USER_ID", arrayFriends.get(position).getFriendID());
                showFriendsProfile.putExtra("NAME", arrayFriends.get(position).getFriendName());
                activity.startActivity(showFriendsProfile);
            }
        });
        return vi;
    }
    @Override
    public Filter getFilter() {
        Filter filter = new Filter() {
            @SuppressWarnings("unchecked")
            @Override
            protected void publishResults(CharSequence constraint,
                    FilterResults results) {
                arrayFriends = (ArrayList<getFriends>) results.values;
                notifyDataSetChanged();
            }
            @Override
            protected FilterResults performFiltering(CharSequence constraint) {
                FilterResults results = new FilterResults();
                ArrayList<getFriends> FilteredArrayNames = new ArrayList<getFriends>();
                if (mOriginalNames == null) {
                    mOriginalNames = new ArrayList<getFriends>(arrayFriends);
                }
                if (constraint == null || constraint.length() == 0) {
                    results.count = mOriginalNames.size();
                    results.values = mOriginalNames;
                } else {
                    constraint = constraint.toString().toLowerCase();
                    for (int i = 0; i < mOriginalNames.size(); i++) {
                        getFriends dataNames = mOriginalNames.get(i);
                        if (dataNames.getFriendName().toLowerCase()
                                .contains(constraint.toString())) {
                            FilteredArrayNames.add(dataNames);
                        }
                    }
                    results.count = FilteredArrayNames.size();
                    // System.out.println(results.count);
                    results.values = FilteredArrayNames;
                    // Log.e("VALUES", results.values.toString());
                }
                return results;
            }
        };
        return filter;
    }
}
You can use the concept here and substitute for your ListView. I have used this elsewhere for a ListView and works as it should. Unfortunately, I cannot give that code away on a public fora. Hope this helps you though. Again, a very lengthy post no doubt, but necessary I believe.