如何使用2个不同的过滤器输入过滤相同的列表2次。 (按SearchView和代码过滤)

时间:2019-06-25 08:53:47

标签: java android filter tags

我目前正在做一个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) {
        }
    });

Picture of the "error" -> the filter by location gets replaced by filter by tag, instead of filtering the already filtered

0 个答案:

没有答案