0
사용자 지정 개체 목록에 필터를 구현하고 있습니다. 필터가 작동하지만 목록을 필터링하면 필터링 된 결과 목록이 표시되고 다른 단어로 필터링하려고하면 목록이 비어있는 것처럼 보입니다.필터 사용자 지정 개체 목록, 검색 후 원래 목록이 사라집니다.
필터링 할 때 원본 목록이 표시되지 않습니다.
어댑터 :
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();
}
};
}
}
도와주세요 ..
아직 원래 목록이 표시되지 않습니다. – Sid
@Sid, 편집 된 코드, 다시 시도하십시오 –
예 편집 한 코드를 시도했습니다. – Sid