我正在创建一个购物车,其中有一个列出产品的recyclerview,每个产品旁边都有一个+或-数量字段,该字段具有添加和增加产品数量的功能,但是问题是当我自动更改产品的数量,该数量也分配到其他行中,穿插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;
}
}
}
答案 0 :(得分:0)
之所以发生这种情况,是因为RecyclerView重用了View,而您没有在txtQtd
中操纵onBindViewHolder
。
您可以做的是将数量增量保存在Produto
对象中,并在onBindViewHolder
中显示