我正在创建一个购物车,其中有一个回收列表,列出了产品,每个产品旁边都有一个+或 - 数量字段,该字段具有添加和增加产品数量的功能,但问题是当我更改金额时一个产品自动这个数量也去其他线,穿插10个中的10个,我知道这是因为中间的recyclerview加载10个中的10个并且去清洁,所以我不知道如何解决这个问题,请按照下面的代码参考图像
public class ProdutosCodBarrasAdapter extends RecyclerView.Adapter<ProdutosCodBarrasAdapter.ViewHolderProdutos> {
private List<Produto> dados;
private List<PedidoItens> dados2;
public Button actionProdMais;
public Button actionProdMenos;
public TextView txtQtd;
private TabelaPreco tabelaPreco;
private TabelaPrecoProdutoRepositorio tabelaPrecoProdutoRepositorio;
public Double varBaseValor;
public int varCodProduto;
public Double passaQtd;
public Produto[] produto;
public String varprecoBaseNovoAjuste;
public int varCodProdutoExcluir;
public int varCodProdutoItemExcluir;
private SQLiteDatabase conexao;
private DadosOpenHelper dadosOpenHelper;
public int varB;
public int varC;
public int varD;
public String varE;
public static final String NOME_PREFERENCE = "INFORMACOES_LOGIN_AUTOMATICO";
public int cli_emp_id;
public ProdutosCodBarrasAdapter(List<Produto> dados){
this.dados = dados;
}
@NonNull
@Override
public ProdutosCodBarrasAdapter.ViewHolderProdutos onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
View view = layoutInflater.inflate(R.layout.linha_carrinho_add, parent,false);//R.layout.linha_produtos, parent,false
ViewHolderProdutos holderProdutos = new ViewHolderProdutos(view, parent.getContext());
view.setBackgroundColor(0xFFF0F0F0);
return holderProdutos;
}
@Override
public void onBindViewHolder(@NonNull ProdutosCodBarrasAdapter.ViewHolderProdutos holder, int position) {
if((dados != null) && (dados.size() > 0)) {
DecimalFormat formatoDois = new DecimalFormat("##,###,###,##0.00", new DecimalFormatSymbols(new Locale("pt", "BR")));
formatoDois.setMinimumFractionDigits(2);
formatoDois.setParseBigDecimal (true);
//CARREGAR NA BINDVIEW aqui ele gera de 10 em 10, sempre ir atualizano a lista com as alterações (dados)
Produto produto = dados.get(position);
holder.listNomeProd.setText(produto.tab_id + " : " + produto.est_descricao_cor + " - " + produto.est_tam + " posição: "+position);//aqui morre
//holder.listRefProd.setText(produto.prod_referencia.toString());//
varprecoBaseNovoAjuste = new String(formatoDois.format(produto.tab_preco_final));
varB = Integer.parseInt(produto.varCodPed);//codigo do pedido
varC = Integer.parseInt(String.valueOf(produto.codigo_prod));//codigo produto
varD = Integer.parseInt(String.valueOf(produto.est_id_cor));//codigo da cor
varE = String.valueOf(produto.est_tam);//tamanho
holder.listPrecoProd.setText(varprecoBaseNovoAjuste);//aqui? holder.listPrecoProd.setText(formatoDois.format(produto.tab_preco_final.toString()));
varCodProdutoItemExcluir = produto.prod_id;
holder.listPegaCodPedidoItem2.setText(String.valueOf(varCodProdutoItemExcluir));
varBaseValor = produto.tab_preco_final;
varCodProduto = produto.prod_id;
}
}
@Override
public int getItemCount() {
return dados.size();
}
public class ViewHolderProdutos extends RecyclerView.ViewHolder implements View.OnClickListener {
private TextView listNomeProd;
private TextView listPrecoProd;
private ImageView idImagen;
private TextView txtQtd;
private double pegaQtd;
private TextView listPegaCodPedidoItem2;
public ViewHolderProdutos(@NonNull View itemView, final Context context) {
super(itemView);
listNomeProd = (TextView) itemView.findViewById(R.id.listNomeProd);
listPrecoProd = (TextView) itemView.findViewById(R.id.listPrecoProd);
txtQtd = (TextView) itemView.findViewById(R.id.txtQtd);
passaQtd = Double.valueOf(txtQtd.getText().toString());
listPegaCodPedidoItem2 = (TextView) itemView.findViewById(R.id.listPegaCodPedidoItem2);
actionProdMais = (Button) itemView.findViewById(R.id.actionProdMais);
actionProdMais.setOnClickListener(this);
actionProdMenos = (Button) itemView.findViewById(R.id.actionProdMenos);
actionProdMenos.setOnClickListener(this);
//ATUALIZAR ELE NA VIEW
//
actionProdMenos.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
// get position
int pos = getAdapterPosition();
// check if item still exists
if(pos != RecyclerView.NO_POSITION){
Produto produto = dados.get(pos);
Double pegaQtd2 = Double.valueOf(txtQtd.getText().toString());
if(pegaQtd2 > 1.00){pegaQtd2--;}
txtQtd.setText(pegaQtd2.toString());
Double pegaPrecoProd2 = pegaQtd2 * varBaseValor;
DecimalFormat formatoDois2 = new DecimalFormat("##,###,###,##0.00", new DecimalFormatSymbols(new Locale("pt", "BR")));
formatoDois2.setMinimumFractionDigits(2);
formatoDois2.setParseBigDecimal (true);
listPrecoProd.setText(formatoDois2.format(pegaPrecoProd2).toString());
passaQtd = Double.valueOf(pegaQtd2.toString());
Toast.makeText(v.getContext(), "TAM: " + produto.est_tam + "QTD: " + passaQtd, Toast.LENGTH_SHORT).show();
//ProdutosCodBarrasAdapter.this.notifyItemChanged(pos, "payload " + pos);
//Toast.makeText(v.getContext(), "You clicked " + produto.est_tam, Toast.LENGTH_SHORT).show();
}
}
});
//
//
actionProdMais.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
// get position
int pos = getAdapterPosition();
// check if item still exists
if(pos != RecyclerView.NO_POSITION){
Produto produto = dados.get(pos);
Double pegaQtd = Double.valueOf(txtQtd.getText().toString());
pegaQtd++;
txtQtd.setText(pegaQtd.toString());
Double pegaPrecoProd = pegaQtd * varBaseValor;
DecimalFormat formatoDois = new DecimalFormat("##,###,###,##0.00", new DecimalFormatSymbols(new Locale("pt", "BR")));
formatoDois.setMinimumFractionDigits(2);
formatoDois.setParseBigDecimal (true);
listPrecoProd.setText(formatoDois.format(pegaPrecoProd).toString());
passaQtd = Double.valueOf(pegaQtd.toString());
Toast.makeText(v.getContext(), "TAM: " + produto.est_tam + "QTD: " + passaQtd, Toast.LENGTH_SHORT).show();
}
}
});
//
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.actionProdMais:
break;
case R.id.actionProdMenos:
break;
default:
break;
}
}
}
它正在发生,因为RecyclerView正在重用View而你并没有在txtQtd
中操纵onBindViewHolder
。
您可以做的是保存Produto
对象中的数量增量并在onBindViewHolder
中显示相同的数量