gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 09:06:17 25 4
gpt4 key购买 nike

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

过滤后看不到原始列表。

适配器:

    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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com