Android RecyclerView项目布局未更新

Android RecyclerView项目布局未更新,android,android-recyclerview,Android,Android Recyclerview,我正在使用RecyclerView实现编辑文本,当用户在编辑文本中输入任何文本时,RecyclerView应该更新其项和视图。这是一个非常常见的需求,我已经找到了很多解决方案。但我面临一个奇怪的问题,在筛选recylcerView之后,列表中显示的项目是错误的。 来说明。假设RecylcerView包含a、b、c、d和e项。 如果我搜索c。列表仅显示一项“a”。但是,当我单击此项时,它仅为“c”。这意味着只有布局未更新,但值会更新。 下面是我的实现 public class CustomFilt

我正在使用RecyclerView实现编辑文本,当用户在编辑文本中输入任何文本时,RecyclerView应该更新其项和视图。这是一个非常常见的需求,我已经找到了很多解决方案。但我面临一个奇怪的问题,在筛选recylcerView之后,列表中显示的项目是错误的。
来说明。假设RecylcerView包含a、b、c、d和e项。 如果我搜索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();
    }

请参见下面的示例,您必须使用结果更新数据。请重试

@SuppressWarnings("unchecked")
        @Override
        protected void publishResults(CharSequence constraint, FilterResults results) {
            mFilteredData = (ArrayList<String>) results.values;
            notifyDataSetChanged();
        }
@SuppressWarnings(“未选中”)
@凌驾
受保护的void publishResults(CharSequence约束、FilterResults结果){
mFilteredData=(ArrayList)results.values;
notifyDataSetChanged();
}

我不知道它为什么会这样工作。但我已经找到了一份工作。
recyclerView.swapAdapter(sListRecyclerViewAdapter,false)

它基本上是用新的适配器交换适配器,但循环使用以前的视图。这不是很理想,但至少是可行的。

这可能会对你有所帮助@谢谢,但我已经经历了这个。。没用..我的问题是为什么即使调用notifyDataSetChanged.notifyDataSetChanged.notifyDataSetChanged,布局也不会重新绘制。。我已经在performFiltering方法中设置了值。”sData'这里是与适配器关联的ArrayList。