My countdownTimers
works fine but my problem is all of them sync with last countdownTimer
(bank or item in recyclerview
) for example my time interval in item one is 30sec,in item two is 30sec and in item 3 is 60sec when i run my app item 1 and item 2 will be sync with item 3 ,60sec , i think i have one countdownTimer
in whole recyclerview
and not for per item.
This is my bank list view holder :
private static class BankListViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
private ImageView mImageViewBankLogo;
private TextView mBankName;
private TextView mFirstToken;
private TextView mSecondToken;
private Button mButtonAddToken;
private RelativeLayout mRelativeLayoutFirstTokenRowLayout;
private RelativeLayout mRelativeLayoutSecondTokenRowLayout;
private Callback mCallback;
private ProgressBarView mProgressBarView;
private CountDownTimer countDownTimer;
BankListViewHolder(@NonNull View itemView, Callback callback) {
super(itemView);
mCallback = callback;
mImageViewBankLogo = itemView.findViewById(R.id.imageview_banklist_logo);
mProgressBarView = itemView.findViewById(R.id.imageview_overlay);
mBankName = itemView.findViewById(R.id.textview_banklist_bankname);
mFirstToken = itemView.findViewById(R.id.textview_banklist_firsttoken);
mSecondToken = itemView.findViewById(R.id.textview_banklist_secondtoken);
mButtonAddToken = itemView.findViewById(R.id.button_banklist_addtoken);
mRelativeLayoutSecondTokenRowLayout = itemView.findViewById(R.id.relativelayout_banklist_secondtokenrowlayout);
mRelativeLayoutFirstTokenRowLayout = itemView.findViewById(R.id.relativelayout_banklist_firsttokenrowlayout);
mButtonAddToken.setOnClickListener(this);
mRelativeLayoutSecondTokenRowLayout.setOnClickListener(this);
mRelativeLayoutFirstTokenRowLayout.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if (v.getId() == R.id.relativelayout_banklist_firsttokenrowlayout) {
BankUtil.copyToClipBoard(mFirstToken.getText().toString(), v.getContext());
SnackbarUtil.showSnackbarNotify(v, v.getContext().getString(R.string.banklist_copyotp), v.getContext());
}
if (v.getId() == R.id.relativelayout_banklist_secondtokenrowlayout) {
BankUtil.copyToClipBoard(mSecondToken.getText().toString(), v.getContext());
SnackbarUtil.showSnackbarNotify(v, v.getContext().getString(R.string.banklist_copyotp), v.getContext());
}
if (v.getId() == R.id.button_banklist_addtoken) {
mCallback.navigationToQrScanner(getAdapterPosition());
}
}
}
And this is my onBindViewHolder
:
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int position) {
.
.
.
bankListViewHolder.mFirstToken.setText(setSpaceBetweenCharacters(generateOtp(bank, 1)));
bankListViewHolder.mSecondToken.setText(setSpaceBetweenCharacters(generateOtp(bank, 2)));
bankListViewHolder.mButtonAddToken.setVisibility(View.GONE);
bankListViewHolder.mImageViewBankLogo.setImageDrawable(BankUtil.getLogo(mRoot.getContext(), mBankList.get(position)));
int currentSecond = (int) (((System.currentTimeMillis() / 1000) -
(bank.getToken().getOtpGenerationPeriodInSeconds() / 1000)) % (bank.getToken().getOtpGenerationPeriodInSeconds() / 1000));
int diff = ((bank.getToken().getOtpGenerationPeriodInSeconds() / 1000) - currentSecond);
bankListViewHolder.countDownTimer = new CountDownTimer(diff * 1000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
bankListViewHolder.mProgressBarView.setCounter((int) ((bank.getToken().getOtpGenerationPeriodInSeconds() / 1000) -
(millisUntilFinished / 1000)) * (360 / (bank.getToken().getOtpGenerationPeriodInSeconds() / 1000)));
}
@Override
public void onFinish() {
bankListViewHolder.mFirstToken.setText(generateOtp(bank, 1));
bankListViewHolder.mSecondToken.setText(generateOtp(bank, 2));
mCallback.updateList();
start();
}
};
countDownTimerList.add(bankListViewHolder.countDownTimer);
bankListViewHolder.countDownTimer.start();
mCallback.saveCountDownTimer(bankListViewHolder.countDownTimer);
.
.
.
}