2017-10-18 97 views
0

有这个几乎完美的RecyclerView。我几乎说,因为一切正常,图像,加号和减号按钮,甚至让它记住文本字段的值,当你将它从屏幕上滚出并返回时。他们大多数人。回收商视图的小错误

我错过了这里的东西,我无法找到它,所以我请求一些帮助。如果我将视图从屏幕上滚动出来,无论是顶部还是底部,它都会记住文本字段的值(我想要的),但是当我使用“箱子减号按钮”(仅限该按钮)时,它会更改托盘当我在屏幕上向后滚动时,将值(pallets_text_view)复制到案例值(cases_text_view)。

请注意,只有当我触摸“案件减号按钮”。所有其他工作正常,“案件加按钮”和两个托盘按钮,只有在我贴上“托盘减号按钮”后,当我将该行从屏幕上滚动回屏幕时,文本才会更改。

After I scrolled up and then back.

看到图像,这是在我滚出屏幕和背部。我没有触及的最重要的一个(黑色标签),野蛮的水果我挖掘案件-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); 
     } 
      }} 
}  
+0

我强烈建议你仔细看看如何使用'RecyclerView'的一些例子,特别是如何使用'ViewHolder'! – Barns

回答

1

我认为你的结果分配给错了对象:

在你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)

+0

的确如此。非常感谢你。从我的代码中可以看到,我对Java很陌生。我目前在零售业。在这次交易中,我们有一件事,我们说你得到了“商店盲目”,这意味着你开始错过某些事情,主要是因为你一直在商店里,你开始习惯于这样做,而不是注意到它的错误。我认为必须有一个像“密码盲”这样的术语,这就是发生在这里的事情。我昨天花了整整一天的时间查看我的代码,但我没有看到它,因此我在这里发布了它,希望其他人可能会注意到它(可能是一目了然)。坦克再次。 –