RealmBaseAdapter с возможностью выбора элемента реализации Filterable - PullRequest
0 голосов
/ 21 января 2020

Я реализовал RealmBaseAdapter, который реализует Filterable. Фильтрация работает как положено. Моя проблема связана с выбором товара. После выбора элемента он отображается в AutoCompleteTextView как сериализация объекта. Я хочу отобразить только свойство name объекта. ArrayAdapter имеет функцию public CharSequence convertResultToString(Object resultValue), которая выполняет именно это. Как я могу добиться чего-то похожего, используя RealmBaseAdapter? Очевидное решение - переопределить toString в объекте, но я не хочу использовать этот обходной путь.

public class JudetAdapter extends RealmBaseAdapter<Judet> implements Filterable {

    private Realm realm;
    private int rowLayoutId;
    private int textViewResourceId;

    public JudetAdapter(@NonNull Realm realm, int rowLayoutId, int textViewResourceId, @NonNull OrderedRealmCollection<Judet> judetList) {
        super(judetList);
        this.rowLayoutId = rowLayoutId;
        this.textViewResourceId = textViewResourceId;
        this.realm = realm;
    }

    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        final Context context = parent.getContext();
        LayoutInflater layoutInflater = LayoutInflater.from(context);

        final View vehicleLayout = layoutInflater.inflate(rowLayoutId, parent, false);
        final TextView rowView = vehicleLayout.findViewById(textViewResourceId);
        final Judet judet = getItem(position);
        rowView.setText(judet.getName());
        return rowView;
    }

    private void filterResults(CharSequence text) {
        String filter = text == null ? new String() : text.toString().trim();
        if(filter.isEmpty()) {
            updateData(realm.where(Judet.class).findAll());
        } else {
            updateData(realm.where(Judet.class)
                    .contains("name", filter, Case.INSENSITIVE)
                    .findAll());
        }
    }

    @Override
    public Filter getFilter() {
        return new JudetFilter(this);
    }


    private class JudetFilter
            extends Filter {
        private final JudetAdapter adapter;

        private JudetFilter(JudetAdapter adapter) {
            super();
            this.adapter = adapter;
        }

        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            return new FilterResults();
        }

        @Override
        protected void publishResults(CharSequence constraint, FilterResults results) {
            adapter.filterResults(constraint);
        }
    }
}
...