微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

RecyclerView 搜索过滤器只过滤一个值

如何解决RecyclerView 搜索过滤器只过滤一个值

我在我的 RecyclerView 中实现了一个搜索过滤器,但是它似乎只过滤了数组的 1 列,例如当我输入 Banana 时;食物将过滤到香蕉,但是它旁边的卡路里数字只会显示卡路里第一列的值。 我可以实施什么来确保它一次过滤所有列,请参阅下面的代码

public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.MyViewHolder> implements Filterable {
UserLoginAdapter userLoginAdapter;
private Context context;
private ArrayList<String> FoodID,FoodName,Calories;
private ArrayList<String> FoodNameDuplicate;
private OnItemClickListener mOnItemClickListener;


public interface OnItemClickListener{
    public void onItemClick(View view,int position);
}

CustomAdapter(Context context,ArrayList FoodID,ArrayList FoodName,ArrayList Calories,OnItemClickListener onItemClickListener) {
    this.context = context;
    this.FoodID = FoodID;
    this.FoodName = FoodName;
    this.Calories = Calories;
    FoodNameDuplicate = new ArrayList<>(FoodName);
    mOnItemClickListener = onItemClickListener;
}

@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType) {
    LayoutInflater inflater = LayoutInflater.from(context);
    View view = inflater.inflate(R.layout.foodrows,parent,false);
    return new MyViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull final MyViewHolder holder,int position) {

    holder.FoodID.setText(String.valueOf(FoodID.get(position)));
    holder.FoodName.setText(String.valueOf(FoodName.get(position)));
    holder.Calories.setText(String.valueOf(Calories.get(position)));

    holder.itemView.setonClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mOnItemClickListener.onItemClick(v,holder.getAdapterPosition());
        }
    });
}

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

public class MyViewHolder extends RecyclerView.ViewHolder {

    TextView FoodID,Calories;

    public MyViewHolder(@NonNull View itemView) {
        super(itemView);

        FoodID = itemView.findViewById(R.id.textView_FoodID);
        FoodName = itemView.findViewById(R.id.textView_FoodNameTextView);
        Calories = itemView.findViewById(R.id.textView_FoodCaloriesTextView);
    }
}

@Override
public Filter getFilter() {
    return foodFilter;
}

private Filter foodFilter = new Filter() {
    @Override
    protected FilterResults performFiltering(CharSequence constraint) {
        ArrayList<String> filteredList = new ArrayList<>();

        if(constraint == null || constraint.length() == 0){
            filteredList.addAll(FoodNameDuplicate);
        } else {
            java.lang.String filterPattern = constraint.toString().toLowerCase().trim();

            for(String item : FoodNameDuplicate){
                if(item.toLowerCase().contains(filterPattern)){
                    filteredList.add(item);
                }
            }
        }
        FilterResults results = new FilterResults();
        results.values = filteredList;
        return results;
    }

    @Override
    protected void publishResults(CharSequence constraint,FilterResults results) {
        FoodName.clear();
        FoodName.addAll((ArrayList)results.values);
        notifyDataSetChanged();
    }
};

}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。