2016-12-21 40 views
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(); 
      } 
     }; 
    } 
} 

請幫助..謝謝..

回答

1

使用此代碼

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(); 
      } 
     }; 
    } 

因爲我們需要將原始列表存儲在單獨的數組列表中,我們需要從中獲取過濾器數據。

+0

還沒有得到原始列表。 – Sid

+0

@Sid,編輯過的代碼,請再試一次 –

+0

是的,我試過編輯好的代碼。 – Sid