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