RecyclerView项目布局未更新

时间:2017-01-16 10:32:12

标签: android android-recyclerview

我正在使用RecyclerView实现编辑文本,当用户在编辑文本中输入任何文本时,RecylecerView应该更新其项目及其视图。这是一个非常普遍的要求,我已经找到了大量的解决方案。但我面临一个奇怪的问题,即过滤后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();
    }

2 个答案:

答案 0 :(得分:0)

请参阅下面的示例,您必须使用result更新数据。请尝试

@SuppressWarnings("unchecked")
        @Override
        protected void publishResults(CharSequence constraint, FilterResults results) {
            mFilteredData = (ArrayList<String>) results.values;
            notifyDataSetChanged();
        }

答案 1 :(得分:0)

我不知道为什么这样做。但我找到了一个解决方案。 recyclerView.swapAdapter(sListRecyclerViewAdapter,false); 它基本上是用新的适配器交换适配器,但回收早期的视图。它不是最优,但至少可行。