Макет элемента RecyclerView не обновлен

Я реализую редактировать текст с RecyclerView, где RecylecerView должен обновить свой элемент и его представление, когда пользователь вводит любой текст в редактируемом тексте. Это очень распространенное требование, и я нашел тонны решения для этого. Но я столкнулся со странной проблемой, что после фильтрации recylcerView показывает неправильный элемент в списке.
Для Иллюстрации . предположим, что RecylcerView содержит элементы A,b,c, d и E.
if I search ‘ c. список показывает только один элемент ‘a’. однако, когда я нажимаю на этот пункт, это только «c». это означает, что только макет не обновляется, однако значения обновляются.
Вот моя реализация.

public class CustomFilter extends Filter{
    private CustomFilter(SListRecyclerViewAdapter mAdapter) {
        super();
    }
    @Override
    protected FilterResults performFiltering(CharSequence constraint) {
        sData.clear();
        final FilterResults results = new FilterResults();
        if (constraint.length() == 0) {
            sData.addAll(filteredsData);
        }
        else {
            final String filterPattern = constraint.toString().toLowerCase().trim();
            for (final S surg: filteredsData) {
                if (S.getSUserName().toLowerCase(Locale.getDefault()).contains(filterPattern)) {
                    sData.add(surg);
                }
            }
        }
        results.values = sData;
        results.count = sData.size();
        return results;
    }

    @Override
    protected void publishResults(CharSequence constraint, FilterResults results) {
        notifyDataSetChanged();
    }

2 ответа

  1. Пожалуйста см. ниже пример, вы должны уточнить данные с результатом.Пожалуйста, попробуйте

    @SuppressWarnings("unchecked")
            @Override
            protected void publishResults(CharSequence constraint, FilterResults results) {
                mFilteredData = (ArrayList<String>) results.values;
                notifyDataSetChanged();
            }
    
  2. Я не знаю, почему это работает таким образом. Но я нашел работу вокруг.
    recyclerView.swapAdapter(sListRecyclerViewAdapter,false);
    Это в основном замена адаптера на новый, но переработка более ранних представлений. Его не очень оптимальная, но, по крайней мере, выполнимо.