Как проверить, является ли отфильтрованный результат recyclerView нулевым?

На самом деле у меня есть метод фильтра в моем адаптере 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()));
    }

В вашей функции publishResults() вы можете добавить if для проверки results.size. Если он равен 0, вы можете отобразить предупреждение. В противном случае обновите свой RecyclerView

cesarmarch 22.07.2019 16:57

попробуйте инициализировать подобранный список и проверьте размер списка> 0, а не нуль или нет, чтобы избежать исключения nullpointerException

B.mansouri 22.07.2019 16:57

@cesarmarch results.size не является функцией .. я пытался проверить results.values, но ничего, он по-прежнему считает все элементы

NiceToMytyuk 22.07.2019 17:09
1
3
230
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

вместо проверки 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();
        }

Другие вопросы по теме