У меня есть recyclerView
с Chips
, и реализуем Filterable
, для этого RecyclerViewAdapter
я устанавливаю Chip
состояние isSelected
, когда пользователь нажимает на него, но после того, как пользователь использует вид поиска, чтобы выбрать другой чип это refre sh все состояния чипов
onChipClickListener
на чипе:
currentItemName(//it is Chip).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (currentItemName.isSelected()) {
currentItemName.setChipBackgroundColorResource(R.color.colorChipUnchecked);
currentItemName.setTextColor(mContext.getResources().getColor(R.color.colorTextChipUnchecked));
Toast.makeText(mContext, currentItemName.getText().toString(), Toast.LENGTH_SHORT).show();
currentItemName.setSelected(false);
} else {
currentItemName.setChipBackgroundColorResource(R.color.colorAccentBlue);
currentItemName.setTextColor(mContext.getResources().getColor(R.color.colorWhite));
currentItemName.setSelected(true);
String string = currentItemName.getText().toString().toLowerCase();
}
}
});
Методы фильтрации:
@Override
public Filter getFilter() {
return exampleFilter;
}
private Filter exampleFilter = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
List<ModelChip> filteredList = new ArrayList<>();
if(constraint == null || constraint.length() == 0){
filteredList.addAll(mListAll);
}
else {
String filterPattern = constraint.toString().toLowerCase().trim();
for (ModelChip item : mListAll){
if (item.getText().toLowerCase().contains(filterPattern)){
filteredList.add(item);
}
}
}
FilterResults results = new FilterResults();
results.values = filteredList;
return results;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
mList.clear();
mList.addAll((Collection<? extends ModelChip>) results.values);
notifyDataSetChanged();
}
};