Recyclerview自动每10行更改一次信息

问题描述 投票:-1回答:1

我正在创建一个购物车,其中有一个回收列表,列出了产品,每个产品旁边都有一个+或 - 数量字段,该字段具有添加和增加产品数量的功能,但问题是当我更改金额时一个产品自动这个数量也去其他线,穿插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;
        }
    }

}

} foto do app

android android-recyclerview
1个回答
0
投票

它正在发生,因为RecyclerView正在重用View而你并没有在txtQtd中操纵onBindViewHolder

您可以做的是保存Produto对象中的数量增量并在onBindViewHolder中显示相同的数量

© www.soinside.com 2019 - 2024. All rights reserved.