Как отфильтровать один и тот же список 2 раза с помощью 2 разных фильтров.(Фильтр по SearchView и тегу) - PullRequest
0 голосов
/ 25 июня 2019

В настоящее время я делаю приложение для Android Studio, которое рекомендует действия для людей.

Короче говоря, я хочу отфильтровать список, а затем отфильтровать уже отфильтрованный список.

Япредназначенный для отображения ListView действий, которые нужно искать / фильтровать по местоположению действия.Я также хочу иметь систему тегов, которая фильтрует действия в соответствии с тегами, такими как #Solo #Family # Food.

В настоящее время я реализовал обе системы, однако они перекрывают друг друга.

После того, как я отфильтрую список по расположению, если я попытаюсь отфильтровать отфильтрованный список по системе тегов, список сбрасывается и больше не фильтруется по местоположению, а только по тегам.Есть ли способ сначала отфильтровать список по местоположению, а затем отфильтровать уже отфильтрованный список по тегам?

Спасибо за помощь:)

Код для фильтра по местоположению

    public void filter (String charText) {
    charText = charText.toLowerCase(Locale.getDefault());
    recommendationInfoList.clear();
    if (charText.length() == 0) {
        recommendationInfoList.addAll(arrayList);
    } else {
        for (RecommendationInfo rc : arrayList) {
            if (rc.getLocation().toLowerCase(Locale.getDefault()).contains(charText)) {
                recommendationInfoList.add(rc);
            }
        }
    }
    notifyDataSetChanged();
}

        SearchView searchView = (SearchView) findViewById(R.id.mainSearchView);
    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {
            return false;
        }

        @Override
        public boolean onQueryTextChange(String newText) {
            if (TextUtils.isEmpty(newText)) {
                adaptor.filter("");
                mListView.clearTextFilter();
            } else {
                adaptor.filter(newText);
            }

            return true;
        }
    });

И код для фильтра по тегу

public void tagFilter (String charText) {
charText = charText.toLowerCase(Locale.getDefault());
    recommendationInfoList.clear();
    if (charText.length() == 0) {
        recommendationInfoList.addAll(arrayList);
    } else {
        for (RecommendationInfo rc : arrayList) {
            if (rc.getTags().toLowerCase(Locale.getDefault()).contains(charText)) {
                recommendationInfoList.add(rc);
            }
        }
    }
    notifyDataSetChanged();
}

    TextView tagFilter = findViewById(R.id.filterByTags);
    tagFilter.addTextChangedListener(new TextWatcher() {
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            System.out.println("Text ["+s+"]");

            adaptor.tagFilter(s.toString());
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                                      int after) {

        }

        @Override
        public void afterTextChanged(Editable s) {
        }
    });

Изображение «ошибки» -> фильтр по местоположению заменяется фильтром по тегу вместо фильтрации уже отфильтрованного

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...