В настоящее время я делаю приложение для 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) {
}
});
Изображение «ошибки» -> фильтр по местоположению заменяется фильтром по тегу вместо фильтрации уже отфильтрованного