Почему Filter.publishResults () не запускается внутри моего адаптера? - PullRequest
0 голосов
/ 09 марта 2019

В настоящее время я собираюсь реализовать собственный адаптер массива для SearchView внутри моего приложения.Я собираюсь вернуть автозаполнение с удаленного сервера, поэтому я попытался реализовать свой пользовательский фильтр.

Проблема в моем пользовательском фильтре performFiltering вызывается, однако publishResults никогда не вызывается и списоквсе элементы адаптера массива возвращаются без применения фильтрации.

Мой код приведен ниже, и если он работает правильно, он должен показать 3 фиксированных элемента после фильтрации, которые ttt , xyz , test но, как я объяснил, этого не происходит, и item является элементом массива без каких-либо изменений и фильтрации.

SearchArrayAdapter

class SearchArrayAdapter extends ArrayAdapter<String> implements Filterable {


    public SearchArrayAdapter(@NonNull Context context, int resource) {
        super(context, resource);
    }

    public SearchArrayAdapter(@NonNull Context context, int resource, int textViewResourceId) {
        super(context, resource, textViewResourceId);
    }

    public SearchArrayAdapter(@NonNull Context context, int resource, @NonNull String[] objects) {
        super(context, resource, objects);
    }

    public SearchArrayAdapter(@NonNull Context context, int resource, int textViewResourceId, @NonNull String[] objects) {
        super(context, resource, textViewResourceId, objects);
    }

    public SearchArrayAdapter(@NonNull Context context, int resource, @NonNull List<String> objects) {
        super(context, resource, objects);
    }

    public SearchArrayAdapter(@NonNull Context context, int resource, int textViewResourceId, @NonNull List<String> objects) {
        super(context, resource, textViewResourceId, objects);
    }

    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        View view = super.getView(position, convertView, parent);
        Log.v("MY_TAG", "Adapter Item:" + getItem(position));
        view.setTag(getItem(position));
        return view;
    }

    @NonNull
    @Override
    public Filter getFilter() {
        Filter myFilter = new Filter() {

            @Override
            protected FilterResults performFiltering(CharSequence constraint) {
                FilterResults filterResults = new FilterResults();
                ArrayList<String> x = new ArrayList<>();
                String[] arrayofString = (new String[]{"ttt", "xyz", "test"});
                Collections.addAll(x, arrayofString);
                filterResults.values = x;
                filterResults.count = 3;
                return filterResults;
            }

            @Override
            protected void publishResults(CharSequence constraint, FilterResults results) {
                if (results != null && results.count > 0) {
                    notifyDataSetChanged();
                } else {
                    notifyDataSetInvalidated();
                }
            }
        };
        return myFilter;
    }
}

Внутри моего фрагмента:

SearchArrayAdapter adapter = new SearchArrayAdapter(getActivity(), android.R.layout.simple_list_item_1, searchItems);
mSearchAutoComplete.setAdapter(adapter);
mSearchAutoComplete.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        Log.v("MY_TAG", "Adapter Position: " + position);
        Log.v("MY_TAG", "Adapter String: " + searchItems[position]);
        Log.v("MY_TAG", "Adapter TAG: " + view.getTag());

        searchView.setQuery((String) view.getTag(), true);


    }
});
searchView.setOnSuggestionListener(new SearchView.OnSuggestionListener() {
    @Override
    public boolean onSuggestionSelect(int position) {
        Log.v("MY_TAG", "Item Selected: " + position);
        return true;
    }
...