Witam.
W moim projekcie mam AutoCompleteTextView, do którego mam podpiętą własną klasę odziedziczoną po ArrayAdapter. Filtrowanie udało mi się zrobić, jednak gdy dodałem sortowanie, ono nie działa.

public class BusStop extends SugarRecord {
    private String symbol;
    private String name;
    private String latitude;
    private List<BusArrival> items;
    private String longitude;
    private Boolean starred = false;

    public Boolean getStarred() {
        return starred;
    }

    public void setStarred(Boolean starred) {
        this.starred = starred;
    }

    public BusStop() {
    }

    public List<BusArrival> getItems() {
        return items;
    }

    public void setItems(List<BusArrival> items) {
        this.items = items;
    }

    public String getLongitude() {
        return longitude;
    }

    public void setLongitude(String longitude) {
        this.longitude = longitude;
    }

    public String getSymbol() {
        return symbol;
    }

    public void setSymbol(String symbol) {
        this.symbol = symbol;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getLatitude() {
        return latitude;
    }

    public void setLatitude(String latitude) {
        this.latitude = latitude;
    }

    @Override
    public String toString() {
        return symbol + " " + name;
    }
}
public class BusStopComparator implements Comparator<BusStop> {
    @Override
    public int compare(BusStop lhs, BusStop rhs) {
        if (lhs.getStarred() == rhs.getStarred()) {
            return lhs.toString().compareTo(rhs.toString());
        }
        if (lhs.getStarred()) {
            return 1;
        } else {
            return -1;
        }
    }
}
public class BusStopFilterableAdapter extends ArrayAdapter<BusStop> {
    public List<BusStop> mData = new ArrayList<BusStop>();
    private Filter mFilter;
    private LayoutInflater mInflater;
    private Activity context;

    public BusStopFilterableAdapter(Activity context) {
        super(context, 0);
        init(context);
        this.context = context;
    }

    public BusStopFilterableAdapter(Activity context, int resource) {
        super(context, resource);
        init(context);
        this.context = context;
    }

    public BusStopFilterableAdapter(Activity context, BusStop[] objects) {
        super(context, 0, objects);
        init(context);
        this.context = context;
    }

    public BusStopFilterableAdapter(Activity context, List<BusStop> objects) {
        super(context, 0, objects);
        init(context);
        this.context = context;
    }

    private void init(Context context) {
        mInflater = LayoutInflater.from(context);
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = context.getLayoutInflater();
        View rowView = inflater.inflate(R.layout.bus_stop_row, null, true);

        TextView busStopNumber = (TextView) rowView.findViewById(R.id.bus_stop_number);
        busStopNumber.setText(this.getItem(position).getSymbol());

        TextView busStopName = (TextView) rowView.findViewById(R.id.bus_stop_name);
        busStopName.setText(this.getItem(position).getName());

        final ImageView iview = (ImageView)rowView.findViewById(R.id.starred);
        iview.setClickable(true);
        if (this.getItem(position).getStarred())
        {
            iview.setImageResource(android.R.drawable.btn_star_big_on);
        } else
        {
            iview.setImageResource(android.R.drawable.btn_star_big_off);
        }
        iview.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                BusStop stop = getItem(position);
                stop.setStarred(!stop.getStarred());
                stop.save();
                if (stop.getStarred())
                {
                    iview.setImageResource(android.R.drawable.btn_star_big_on);
                } else
                {
                    iview.setImageResource(android.R.drawable.btn_star_big_off);
                }
                sort(new BusStopComparator());
            }
        });
        return rowView;
    }

    @Override
    public void sort(Comparator<? super BusStop> comparator) {
        synchronized (mData) {
            Collections.sort(mData, comparator);
        }
        notifyDataSetChanged();
    }

    @Override
    public void add(BusStop object) {
        mData.add(object);
        super.add(object);
    }

    @Override
    public void clear() {
        mData.clear();
        super.clear();
    }

    @Override
    public void addAll(Collection<? extends BusStop> collection) {
        for (BusStop item : collection) {
            mData.add(item);
            super.add(item);
        }
    }

    @Override
    public void addAll(BusStop... items) {
        for (BusStop item : items) {
            mData.add(item);
            super.add(item);
        }
    }

    @Override
    public Filter getFilter() {
        if (mFilter == null)
            mFilter = new Filter() {

                @Override
                protected FilterResults performFiltering(CharSequence query) {
                    FilterResults results = new FilterResults();
                    if (TextUtils.isEmpty(query)) {
                        ArrayList<BusStop> list = new ArrayList<BusStop>(mData);
                        results.values = list;
                        results.count = list.size();
                    } else {
                        ArrayList<BusStop> list = new ArrayList<BusStop>();
                        for (BusStop item : mData) {
                            if (TextUtils.isEmpty(item.getName()))
                                continue;
                            if (item.toString().toLowerCase().contains(query.toString().toLowerCase())) {
                                list.add(item);
                            }

                        }
                        results.values = list;
                        results.count = list.size();
                    }
                    return results;
                }

                @Override
                protected void publishResults(CharSequence query, FilterResults r) {
                    BusStopFilterableAdapter.super.clear();
                    if (r.count > 0) {
                        List<BusStop> values = (List<BusStop>) r.values;
                        for (BusStop value : values) {
                            BusStopFilterableAdapter.super.add(value);
                        }
                        BusStopFilterableAdapter.super.notifyDataSetChanged();
                    } else {
                        BusStopFilterableAdapter.super.notifyDataSetInvalidated();
                    }
                }

            };

        return mFilter;
    }
}

Niedziałanie sortowania objawia się tym, że w wysuniętej liście zmienię dla jakiegoś BusStop wartość starred, to nie jest lista ta sortowana by te z getStarred()==true były na górze. Za pomoc dziękuję