回收商视图的小错误
有这个几乎完美的RecyclerView。我几乎说,因为一切正常,图像,加号和减号按钮,甚至让它记住文本字段的值,当你将它从屏幕上滚出并返回时。他们大多数人。回收商视图的小错误
我错过了这里的东西,我无法找到它,所以我请求一些帮助。如果我将视图从屏幕上滚动出来,无论是顶部还是底部,它都会记住文本字段的值(我想要的),但是当我使用“箱子减号按钮”(仅限该按钮)时,它会更改托盘当我在屏幕上向后滚动时,将值(pallets_text_view)复制到案例值(cases_text_view)。
请注意,只有当我触摸“案件减号按钮”。所有其他工作正常,“案件加按钮”和两个托盘按钮,只有在我贴上“托盘减号按钮”后,当我将该行从屏幕上滚动回屏幕时,文本才会更改。
看到图像,这是在我滚出屏幕和背部。我没有触及的最重要的一个(黑色标签),野蛮的水果我挖掘案件-1按钮(去11和使用它回到10)
我知道它必须是某个循环某处,但eish,我看不到它。帮助会感激。
这里是我的CustomAdapter:
public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.MyViewHolder> {
private LayoutInflater inflater;
private Context ctx;
public CustomAdapter(Context ctx) {
inflater = LayoutInflater.from(ctx);
this.ctx = ctx;
}
@Override
public CustomAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = inflater.inflate(R.layout.rv_item, parent, false);
MyViewHolder holder = new MyViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(final CustomAdapter.MyViewHolder holder, int position) {
holder.tvBrand.setText((CharSequence) modelArrayList.get(position).getBrand());
holder.tvImage.setImageResource(Integer.parseInt(String.valueOf(modelArrayList.get(position).getImage())));
holder.tvCases.setText(String.valueOf(modelArrayList.get(position).getNumberCases()));
holder.tvPallet_size.setText(String.valueOf(modelArrayList.get(position).getPallet_size()));
holder.tvPallets.setText(String.valueOf(modelArrayList.get(position).getNumber()));
}
@Override
public int getItemCount() {
return modelArrayList.size();
}
class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
protected Button btn_cases_plus, btn_cases_minus, btn_pallets_plus, btn_pallets_minus;
protected ImageView tvImage;
private TextView tvBrand, tvCases, tvPallets, tvPallet_size;
public MyViewHolder(View itemView) {
super(itemView);
tvBrand = (TextView) itemView.findViewById(R.id.brand_name);
tvImage = (ImageView) itemView.findViewById(R.id.beer_logo);
tvCases = (TextView) itemView.findViewById(R.id.cases_text_view);
tvPallet_size = (TextView) itemView.findViewById(R.id.pallets_size);
tvPallets = (TextView) itemView.findViewById(R.id.pallets_text_view);
btn_cases_plus = (Button) itemView.findViewById(R.id.casePlus1);
btn_cases_minus = (Button) itemView.findViewById(R.id.caseMinus1);
btn_pallets_plus = (Button) itemView.findViewById(R.id.palletsPlus1);
btn_pallets_minus = (Button) itemView.findViewById(R.id.palletsMinus1);
btn_cases_plus.setTag(R.integer.btn_cases_plus_view, itemView);
btn_cases_minus.setTag(R.integer.btn_cases_minus_view, itemView);
btn_cases_plus.setOnClickListener(this);
btn_cases_minus.setOnClickListener(this);
btn_pallets_plus.setTag(R.integer.btn_pallets_plus_view, itemView);
btn_pallets_minus.setTag(R.integer.btn_pallets_minus_view, itemView);
btn_pallets_plus.setOnClickListener(this);
btn_pallets_minus.setOnClickListener(this);
}
// onClick Listener for view
@Override
public void onClick(View v) {
if(v.getId() == btn_pallets_plus.getId()) {
View tempview = (View) btn_pallets_plus.getTag(R.integer.btn_pallets_plus_view);
TextView tvPallets = (TextView) tempview.findViewById(R.id.pallets_text_view);
TextView tvCases = (TextView) tempview.findViewById(R.id.cases_text_view);
TextView tvPallet_size = (TextView) tempview.findViewById(R.id.pallets_size);
int numberPallets = Integer.parseInt(tvPallets.getText().toString()) + 1;
tvPallets.setText(String.valueOf(numberPallets));
int numberCases = Integer.parseInt(tvPallets.getText().toString()) * Integer.parseInt(tvPallet_size.getText().toString());
tvCases.setText(String.valueOf(numberCases));
modelArrayList.get(getAdapterPosition()).setNumber(numberPallets);
modelArrayList.get(getAdapterPosition()).setNumberCases(numberCases);
}
else if (v.getId() == btn_pallets_minus.getId()) {
View tempview = (View) btn_pallets_minus.getTag(R.integer.btn_pallets_minus_view);
TextView tvPallets = (TextView) tempview.findViewById(R.id.pallets_text_view);
TextView tvCases = (TextView) tempview.findViewById(R.id.cases_text_view);
TextView tvPallet_size = (TextView) tempview.findViewById(R.id.pallets_size);
int numberPallets = Integer.parseInt(tvPallets.getText().toString()) - 1;
tvPallets.setText(String.valueOf(numberPallets));
int numberCases = Integer.parseInt(tvPallets.getText().toString()) * Integer.parseInt(tvPallet_size.getText().toString());
tvCases.setText(String.valueOf(numberCases));
if (numberPallets == 0 || numberPallets < 0) {
Toast.makeText(ctx, "You cannot order less than one pallet", Toast.LENGTH_SHORT).show();
tvCases.setText(String.valueOf(0));
tvPallets.setText(String.valueOf(0));
}
modelArrayList.get(getAdapterPosition()).setNumber(numberPallets);
modelArrayList.get(getAdapterPosition()).setNumberCases(numberCases);
}
else if (v.getId() == btn_cases_plus.getId()){
View tempview = (View) btn_cases_plus.getTag(R.integer.btn_cases_plus_view);
TextView tvPallets = (TextView) tempview.findViewById(R.id.pallets_text_view);
TextView tvCases = (TextView) tempview.findViewById(R.id.cases_text_view);
TextView tvPallet_size = (TextView) tempview.findViewById(R.id.pallets_size);
int numberCases = Integer.parseInt(tvCases.getText().toString()) + 1;
tvCases.setText(String.valueOf(numberCases));
modelArrayList.get(getAdapterPosition()).setNumberCases(numberCases);
} else if (v.getId() == btn_cases_minus.getId()) {
View tempview = (View) btn_cases_minus.getTag(R.integer.btn_cases_minus_view);
TextView tvPallets = (TextView) tempview.findViewById(R.id.pallets_text_view);
TextView tvCases = (TextView) tempview.findViewById(R.id.cases_text_view);
TextView tvPallet_size = (TextView) tempview.findViewById(R.id.pallets_size);
int numberCases = Integer.parseInt(tvCases.getText().toString()) - 1;
tvCases.setText(String.valueOf(numberCases));
if (numberCases == 0 || numberCases < 0) {
Toast.makeText(ctx, "You cannot order less than one case", Toast.LENGTH_SHORT).show();
tvCases.setText(String.valueOf(0));
}
modelArrayList.get(getAdapterPosition()).setNumber(numberCases);
}
}}
}
我认为你的结果分配给错了对象:
在你else if btn_case_plus.getId
条件下使用此:
modelArrayList.get(getAdapterPosition()).setNumberCases(numberCases);
但在你else if (v.getId() == btn_cases_minus.getId()
使用条件:
modelArrayList.get(getAdapterPosition()).setNumber(numberCases);
我假设这是你的错误。它应该是.setNumberCases(numberCases)
。
的确如此。非常感谢你。从我的代码中可以看到,我对Java很陌生。我目前在零售业。在这次交易中,我们有一件事,我们说你得到了“商店盲目”,这意味着你开始错过某些事情,主要是因为你一直在商店里,你开始习惯于这样做,而不是注意到它的错误。我认为必须有一个像“密码盲”这样的术语,这就是发生在这里的事情。我昨天花了整整一天的时间查看我的代码,但我没有看到它,因此我在这里发布了它,希望其他人可能会注意到它(可能是一目了然)。坦克再次。 –
我强烈建议你仔细看看如何使用'RecyclerView'的一些例子,特别是如何使用'ViewHolder'! – Barns