На самом деле у меня есть метод фильтра в моем адаптере recyclerView, и когда в массиве нет элемента, recyclerView просто скрывается, и я бы показывал предупреждение, а не просто не отображал элемент.
Как я могу определить, когда фильтр возвращает элемент, не найденный?
Вот метод фильтра из адаптера
@Override
public Filter getFilter() {
return new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
final FilterResults oReturn = new FilterResults();
final ArrayList<ItemModel> results = new ArrayList<>();
if (mFilteredList == null)
mFilteredList = new ArrayList<>(variantiConstructors);
if (constraint != null && constraint.length() > 0) {
if (mFilteredList != null && mFilteredList.size() > 0) {
for (final ItemModel cd : mFilteredList) {
if (cd.getCodiceArticolo().toLowerCase()
.contains(constraint.toString().toLowerCase()))
results.add(cd);
}
}
oReturn.values = results;
oReturn.count = results.size(); //newly Aded by ZA
} else {
oReturn.values = mFilteredList;
oReturn.count = mFilteredList.size(); //newly added by ZA
}
return oReturn;
}
@SuppressWarnings("unchecked")
@Override
protected void publishResults(final CharSequence constraint,
FilterResults results) {
variantiConstructors = new ArrayList<>((ArrayList<ItemModel>) results.values);
notifyDataSetChanged();
}
};
}
И вот где я называю это
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
itemAdapter.getFilter().filter(edtSearch.getText().toString().toLowerCase());
Log.e("COUNT",String.valueOf(itemAdapter.getItemCount()));
}
попробуйте инициализировать подобранный список и проверьте размер списка> 0, а не нуль или нет, чтобы избежать исключения nullpointerException
@cesarmarch results.size не является функцией .. я пытался проверить results.values, но ничего, он по-прежнему считает все элементы
вместо проверки result.values или result.count мне пришлось проверить, возвращался ли variantiConstructor.isEmpty, поскольку результат в любом случае был истинным.
Итак, в адаптере я использую следующий код для отображения предупреждения, когда элементы не найдены.
protected void publishResults(final CharSequence constraint,
FilterResults results) {
variantiConstructors = new ArrayList<>((ArrayList<ItemModel>) results.values);
if (variantiConstructors.isEmpty()){
Alerts.alertError("NO","",mContext);
}
notifyDataSetChanged();
}
В вашей функции
publishResults()
вы можете добавитьif
для проверкиresults.size
. Если он равен 0, вы можете отобразить предупреждение. В противном случае обновите свой RecyclerView