Necesito hacer un contador de número total de cada artículo individual RecyclerView. Aquí hay una imagen y el código para borrar esta situación a cabo:
TTL es que contador total que necesito. Cuando hago clic en el jugador 1 símbolo más, contador total en ese tema en particular se debe aumentar en 1 y el símbolo menos disminución de 1.
Lo que tengo en este momento:
ViewHolder (menos asa y más 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);
}
}
}
});
}
}
En la Actividad:
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();
}
}
});
Así que esto es lo que tengo ahora, pero atm cada usos artículo ese mismo itemCounter, por lo que si hago clic en el jugador 1 más una tecla, su TTL es 1 (como debería), pero después de eso cuando hago clic en el jugador 2 más una tecla, el jugador 2 TTL debe también será 1, pero es, de hecho, 2, causa que 1 adicional provino de que el jugador 1, más clic.
¿Cómo puedo cambiar esto funcione tanto de forma individual?
En cosa es que se puede llamar notifyItemChanged(position)
, de la posición de la fila que ha cambiado, sólo se actualizará ese elemento en la vista de reciclaje.
En lugar de mantener su recuento en totalCounter, se puede obtener el valor de la viewholder que ya está asignado, así que 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);
}
}