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:
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?
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);
}
}