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) 个答案