Я реализовал 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);
}
}
}