Java: Como tornar o contador do número total própria para cada item RecyclerView?

antsakontsa:

Eu preciso fazer um contador de número total para cada item RecyclerView individualmente. Aqui estão uma imagem e um código para limpar esta situação out:

digite descrição da imagem aqui

TTL é esse contador total que eu preciso. Quando clico jogador 1 mais símbolo, contador total, em que determinado item deve ser aumentada em 1 e sinal de subtração decréscimo de 1.

O que eu tenho no momento:

ViewHolder (menos alça e mais símbolos):

public static class GameViewHolder extends RecyclerView.ViewHolder {
    public TextView mTextPlayer, mTextPar, mTotalTxt, mNumberTotal;
    public ImageView mImageMinus, mImagePlus;

    public GameViewHolder(@NonNull View itemView, final GameAdapter.OnItemClickListener listener) {
        super(itemView);
        mTextPlayer = itemView.findViewById(R.id.gameNameRecycler);
        mTextPar = itemView.findViewById(R.id.gameParNumberRecycler);
        mImageMinus = itemView.findViewById(R.id.game_minus_btn);
        mImagePlus = itemView.findViewById(R.id.game_plus_btn);
        mTotalTxt = itemView.findViewById(R.id.game_total_txt);
        mNumberTotal = itemView.findViewById(R.id.game_total_number);

        mImageMinus.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (listener != null) {
                    int position = getAdapterPosition();

                    if (position != RecyclerView.NO_POSITION) {
                        listener.onMinusClick(position);
                    }
                }
            }
        });

        mImagePlus.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (listener != null) {
                    int position = getAdapterPosition();

                    if (position != RecyclerView.NO_POSITION) {
                        listener.onPlusClick(position);
                    }
                }
            }
        });
    }
}

Em Atividade:

mAdapter.setOnItemClickListener(new GameAdapter.OnItemClickListener() {
            int totalCounter = 0;

            @Override
            public void onMinusClick(int position) {
                String parNum = mGameItemList.get(position).getText2();
                int intParNm = Integer.valueOf(parNum);

                if (intParNm != 1) {
                    intParNm -= 1;
                    totalCounter -= 1;

                    mGameItemList.get(position).changeText2(Integer.toString(intParNm));
                    mGameItemList.get(position).changeText4(Integer.toString(totalCounter));
                    mAdapter.notifyDataSetChanged();
                }

            }

            @Override
            public void onPlusClick(int position) {
                String parNum = mGameItemList.get(position).getText2();
                int intParNm = Integer.valueOf(parNum);

                if (intParNm != 99) {
                    intParNm += 1;
                    totalCounter += 1;

                    mGameItemList.get(position).changeText2(Integer.toString(intParNm));
                    mGameItemList.get(position).changeText4(Integer.toString(totalCounter));
                    mAdapter.notifyDataSetChanged();
                }
            }
        });

Então é isso que eu tenho agora, mas atm a cada item usa esse mesmo itemCounter, então se eu clicar jogador 1 mais botão, a sua TTL é 1 (como deveria), mas depois que quando eu clico jogador 2 plus botão, o jogador 2 TTL deve ser também 1, mas é na verdade 2, causa que um adicional veio aquele jogador 1 mais clique.

Como posso mudar isso para se trabalhar tanto individualmente?

Richard Dapice:

Em coisa é que você pode chamar notifyItemChanged(position), sobre a posição da linha que mudou, ele só irá atualizar esse item na vista reciclador.

Em vez de manter a sua contagem em totalCounter, você pode obter o valor do viewholder que já foi atribuído, então algo como String totalCounter = ((TextView) recyclerView.findViewHolderForAdapterPosition(position).itemView.findViewById(R.id.view)).getText().toString();

@Override
     public void onMinusClick(int position) {
            String parNum = mGameItemList.get(position).getText2();
            int intParNm = Integer.valueOf(parNum);

            if (intParNm != 1) {
                intParNm -= 1;
                totalCounter -= 1;
               mGameItemList.get(position).changeText2(Integer.toString(intParNm));
               mGameItemList.get(position).changeText4(Integer.toString(totalCounter));
               adapter.notifyItemChanged(position);
                }

            }

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=231080&siteId=1
Recomendado
Clasificación