有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java RecyclerView搜索过滤器仅过滤一个值

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

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

}


共 (0) 个答案