java - 过滤自定义对象列表,搜索后原始列表消失

标签 java android search arraylist filter

我正在对我的自定义对象列表实现过滤器。过滤器正在工作,但是如果我过滤列表,我会得到过滤结果列表,如果我尝试用不同的单词过滤,列表似乎是空的。

过滤后看不到原始列表。

适配器:

    public class ItemsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements Filterable{
    static final int LOAD_ORDERITEMS = 0;
    private Context context;
    private List<OrderItem> list;

    private AddOrderFragment addOrderFragment;

    public ItemsAdapter(Context context, List<OrderItem> list) {
        this.context = context;
        this.list = list;
        this.addOrderFragment = addOrderFragment;
    }

    @Override
    public int getItemViewType(int position) {

        Object obj = list.get(position);

        if (obj instanceof OrderItem) return LOAD_ORDERITEMS;

        return super.getItemViewType(position);
    }


    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        int viewType = holder.getItemViewType();
        switch (viewType) {

            case LOAD_ORDERITEMS:
                LoadOrderItemsHolder loadOrderItemsHolder = (LoadOrderItemsHolder) holder;

                retrieveAllOrderItem(loadOrderItemsHolder,position);

                break;
        }

    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, final int viewType) {
        RecyclerView.ViewHolder viewHolder = null;
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        switch (viewType) {
            case LOAD_ORDERITEMS:
                View v_image_msg = inflater.inflate(R.layout.item_layout, parent, false);
                viewHolder = new LoadOrderItemsHolder(v_image_msg);
                break;
        }

        return viewHolder;
    }

    @Override
    public int getItemCount() {
        return list.size();
    }

    public void retrieveAllOrderItem(final LoadOrderItemsHolder holder, int position) {

        final OrderItem data = (OrderItem) list.get(position);

        holder.txtItemName.setText(data.getItemName());

        String unit = data.getQuantity() + " " + data.getUnit();
        holder.txtItemQty.setText(unit);

        holder.relativeRow.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                ((SearchActivity)context).linearLayoutRecycleView.setVisibility(View.GONE);
                ((SearchActivity)context).textInput_Item_Unit.setVisibility(View.VISIBLE);
                ((SearchActivity)context).textInput_Item_quantity.setVisibility(View.VISIBLE);

                ((SearchActivity)context).textInput_Item_name.setBackgroundResource(0);
                ((SearchActivity)context).edt_Item_Name.setText(data.getItemName());
                ((SearchActivity)context).edt_Item_quantity.setText(data.getQuantity());
                ((SearchActivity)context).edt_Item_Unit.setText(data.getUnit());

            }
        });

    }
    public Filter getFilter() {
        return new Filter() {

            @Override
            protected FilterResults performFiltering(CharSequence constraint) {
                final FilterResults oReturn = new FilterResults();
                final ArrayList<OrderItem> results = new ArrayList<OrderItem>();

                if (constraint != null) {
                    if (list != null && list.size() > 0) {
                        for (final OrderItem g : list) {
                            if (g.getItemName().toLowerCase()
                                    .contains(constraint.toString()))
                                results.add(g);
                        }
                    }
                    oReturn.values = results;
                }
                return oReturn;
            }

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

请帮忙..谢谢..

最佳答案

使用此代码

static final int LOAD_ORDERITEMS = 0;
private Context context;
private List<OrderItem> list;
private List<OrderItem> baselist = new ArrayList<>();
private AddOrderFragment addOrderFragment;

public ItemsAdapter(Context context, List<OrderItem> list) {
    this.context = context;
    this.list = list;
    this.baselist = list;
    this.addOrderFragment = addOrderFragment;
}

并在过滤器中

 public Filter getFilter() {
        return new Filter() {

            @Override
            protected FilterResults performFiltering(CharSequence constraint) {
                final FilterResults oReturn = new FilterResults();
                final ArrayList<OrderItem> results = new ArrayList<OrderItem>();

                if (constraint != null) {
                    if (baselist != null && baselist.size() > 0) {
                        for (final OrderItem g : baselist ) {
                            if (g.getItemName().toLowerCase()
                                    .contains(constraint.toString()))
                                results.add(g);
                        }
                    }
                    oReturn.values = results;
                }
                return oReturn;
            }

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

由于我们需要将原始列表存储在单独的数组列表中,因此我们需要从中获取过滤数据。

关于java - 过滤自定义对象列表,搜索后原始列表消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41256280/

相关文章:

android - sql语句中同一个查询的多个case和order_by?

javascript - 通过javascript全文搜索CD-Rom上的静态HTML文件

c - 在 C 中的字符串数组中搜索字符串的有效方法。(不区分大小写)

java - 如何使用java中的正则表达式模式从字符串中提取链接?

java - 在 apache 上运行的 java web 应用程序的 HTTPS 问题

java - 如何在java中获取下一个数据库字符串?

android - 自动保存编辑文本值和单选按钮选择

java - MediaCodec 解码时 AV 同步

search - 如何使用ElasticSearch设计搜索用户和好友?

java - 更改字体 System.out.println 的大小