gpt4 book ai didi

java - 更改微调项数据时更新 recyclerview 单行数据

转载 作者:行者123 更新时间:2023-11-30 12:08:51 27 4
gpt4 key购买 nike

我有一个 RecyclerView,如下图所示。

enter image description here

我从服务器获取食品数据并将它们绑定(bind)到 RecyclerView,如上所示。

食品在foodItemList 数组列表中分配,该列表具有foodItemTypeList 数组。在foodItemTypeList数组列表中,存储了类型的值及其对应的价格。

我想要的是当用户选择食物类型(例如中等)时,更新相应的单价。

这是 FoodItemAdapter 类:

public class FoodItemAdapter extends RecyclerView.Adapter<FoodItemAdapter.CustomViewHolder> {
private List<FoodItem> foodItemList;
Context context;
String token;

public class CustomViewHolder extends RecyclerView.ViewHolder {
public TextView food_name, food_unit_price;
Spinner food_item_type;
public ImageView food_item_image;
public Button viewDetail;

public CustomViewHolder(View view) {
super(view);
food_name = (TextView) itemView.findViewById(R.id.food_name);
food_item_type = (Spinner) itemView.findViewById(R.id.food_item_type);
viewDetail = (Button) itemView.findViewById(R.id.viewDetail);
food_unit_price = (TextView) itemView.findViewById(R.id.food_unit_price);
food_item_image = (ImageView) itemView.findViewById(R.id.food_item_image);
}
}

public FoodItemAdapter(Context context, List<FoodItem> foodItemList,String token) {
this.foodItemList = foodItemList;
this.context = context;
this.token = token;
}

@Override
public CustomViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.food_items_item, parent, false);
return new CustomViewHolder(itemView);
}

@Override
public void onBindViewHolder(final CustomViewHolder holder, int position) {
FoodItem foodItem = foodItemList.get(position);
holder.food_name.setText(foodItem.getFood_name());
holder.viewDetail.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {

}
});

holder.food_unit_price.setText(foodItem.getFood_unit_price()+" AF");

if(foodItem.getFood_item_image()!=null && !foodItem.getFood_item_image().isEmpty()){
Picasso.get()
.load(foodItem.getFood_item_image())
// To fit image into imageView
.resize(50, 50)
.centerCrop()
.into(holder.food_item_image);
} else {
Log.d("Food Item Image:", "Food Item image is either empty or null");
}

List<FoodItemType> foodItemTypeList = new ArrayList<>();
foodItemTypeList = foodItem.getFoodItemTypeList();
ArrayAdapter userAdapter = new ArrayAdapter(context, R.layout.spinner, foodItemTypeList);
holder.food_item_type.setAdapter(userAdapter);
holder.food_item_type.setOnItemSelectedListener(new
AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int
position, long id) {

FoodItemType foodItemType = (FoodItemType) (holder.food_item_type).getSelectedItem();
Toast.makeText(context, "Clicked: " +
foodItemType.getFood_unit_price(), Toast.LENGTH_LONG).show();
FoodItem foodItemNew = new FoodItem(foodItemList.get(holder.getAdapterPosition()).getFood_item_id(),foodItemList.get(holder.getAdapterPosition()).getFood_category_id(),foodItemList.get(holder.getAdapterPosition()).getFood_name(),foodItemList.get(holder.getAdapterPosition()).getFood_item_image(),foodItemList.get(holder.getAdapterPosition()).getFood_item_desc(), foodItemType.getFood_item_type_id(),foodItemType.getFood_item_type_name(),foodItemType.getFood_unit_price(), foodItemList.get(holder.getAdapterPosition()).getFoodItemTypeList());
foodItemList.set(holder.getAdapterPosition(),foodItemNew);
notifyItemChanged(holder.getAdapterPosition());
}

@Override
public void onNothingSelected(AdapterView<?> parent) {
// todo for nothing selected
}
});
}

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

}

我的 FoodItemsFragment 类的一部分如下:

recyclerView = (RecyclerView) rootView.findViewById(R.id.recycler_food_item);
foodItemAdapter = new FoodItemAdapter(getActivity(),foodItemList, token);
RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getActivity());

recyclerView.setLayoutManager(mLayoutManager);
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setAdapter(foodItemAdapter);
foodItemAdapter.notifyDataSetChanged();

我的问题是:当我滚动 RecyclerView 时, View 被加载多次(一种滞后),当我更改食物类型(例如:到中等)时,没有任何反应。

感谢任何形式的帮助。

最佳答案

我想建议您在 FoodItem 类中有另一个字段,即 selectedFoodType。这将保存所选类型的索引。默认情况下,将值初始化为 0,当从下拉列表中选择一个项目时,只需相应地更新相应的 FoodItemselectedFoodType

另一件事是,您不必在每次更改 FoodItem 的类型时都创建一个新的 FoodItem。您只需要有 selectedFoodType,然后调用 notifyDataSetChanged()

所以代码应该如下所示。在您的 onItemSelected 函数中,执行以下操作。

int foodType = foodItemTypeList.get(position);
FoodItem foodItem = foodItemNew.get(holder.getAdapterPosition());
foodItem.setSelectedFoodType = foodType;
notifyDataSetChanged();

请注意,我尚未测试此代码。请根据您的需要进行修改。希望有帮助!

关于java - 更改微调项数据时更新 recyclerview 单行数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54166753/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com