Я сталкиваюсь с проблемой в представлении утилизатора, пытающейся добавить таймер обратного отсчета в каждую строку, но его позиция 0 не отображается.
Это означает, что первый элемент не имеет значения обратного отсчета. Снимок экрана Я реализую множество методов и ищу хороший метод, но не найден.
Но другие textview
значения получают. И другой ряд показывает отлично.
@Override
public void onBindViewHolder(@NonNull TournamentListAdapter.ViewHolder holder, int position) {
final Tournament_item model = historyList.get(position);
rank.setText("Rank #"+model.getRank());
Picasso.with(context).load(model.getGame_icon()).into(game_icon);
total_player.setText("Player : "+model.getTotal_player());
////get Current Date
Calendar start_calendar = Calendar.getInstance();
DateFormat c_date = new SimpleDateFormat("yyyy-MM-dd");
DateFormat c_time = new SimpleDateFormat("HH:mm:ss");
Date date_c = new Date();
String date_one = c_date.format(date_c).toString();
String time_one = c_time.format(date_c).toString();
//current.setText("Current Date : "+date_one+" "+time_one);
StringTokenizer c_date_cut = new StringTokenizer(date_one, "-");
StringTokenizer c_time_cut = new StringTokenizer(time_one, ":");
int c_year = Integer.parseInt(c_date_cut.nextToken());
int c_month = Integer.parseInt(c_date_cut.nextToken());
int c_day = Integer.parseInt(c_date_cut.nextToken());
int c_hour = Integer.parseInt(c_time_cut.nextToken());
int c_minut = Integer.parseInt(c_time_cut.nextToken());
int c_second = Integer.parseInt(c_time_cut.nextToken());
start_calendar.set(c_year,c_month,c_day,c_hour,c_minut,c_second);
Calendar end_calendar = Calendar.getInstance();
String date =model.getEnd_date();
String time = model.getEnd_time();
StringTokenizer date_cut = new StringTokenizer(date, "-");
StringTokenizer time_cut = new StringTokenizer(time, ":");
int year = Integer.parseInt(date_cut.nextToken());
int month = Integer.parseInt(date_cut.nextToken());
int day = Integer.parseInt(date_cut.nextToken());
final int hour = Integer.parseInt(time_cut.nextToken());
int minut = Integer.parseInt(time_cut.nextToken());
int second = Integer.parseInt(time_cut.nextToken());
end_calendar.set(year,month,day,hour,minut,second);
////////////////////////////////////////////////////////////////////
long start_millis = start_calendar.getTimeInMillis(); //get the start time in milliseconds
long end_millis = end_calendar.getTimeInMillis(); //get the end time in milliseconds
long total_millis = (end_millis-start_millis); //total time in milliseconds
CountDownTimer cdt = new CountDownTimer(total_millis, 1000) {
@Override
public void onTick(long millisUntilFinished) {
long days = TimeUnit.MILLISECONDS.toDays(millisUntilFinished);
millisUntilFinished -= TimeUnit.DAYS.toMillis(days);
long hours = TimeUnit.MILLISECONDS.toHours(millisUntilFinished);
millisUntilFinished -= TimeUnit.HOURS.toMillis(hours);
long minutes = TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished);
millisUntilFinished -= TimeUnit.MINUTES.toMillis(minutes);
long seconds = TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished);
if(days ==0&&hours==0&& minutes==0) {
forth.setText(seconds+"");
third.setVisibility(View.GONE);
second1.setVisibility(View.GONE);
first.setVisibility(View.GONE);
} else if(days ==0&&hours==0){
forth.setText( seconds+"");
third.setText(minutes + "");
second1.setVisibility(View.GONE);
first.setVisibility(View.GONE);
} else if(days ==0){
first.setVisibility(View.GONE);
forth.setText( seconds+"");
third.setText(minutes + "");
second1.setText(hours+"");
} else {
forth.setText( seconds+"");
third.setText(minutes + "");
second1.setText(hours+"");
first.setText(days+"");
}
}
@Override
public void onFinish() {
third.setText("0");
second1.setText("0");
first.setText("0");
forth.setText("0");
//int po = Integer.parseInt(model.getEntry_fee())*Integer.parseInt(model.getTotal_player());
// times_up(String.valueOf(model.getId()),String.valueOf(po));
}
};
cdt.start();}
Это RecyclerView
Код адаптера.
Обновленный рабочий код:
count_down(total_millis, holder);
private void count_down(long total_millis, final ViewHolder holder) {
holder.cdt = new CountDownTimer(total_millis, 1000) {
@Override
public void onTick(long millisUntilFinished) {
long days = TimeUnit.MILLISECONDS.toDays(millisUntilFinished);
millisUntilFinished -= TimeUnit.DAYS.toMillis(days);
long hours = TimeUnit.MILLISECONDS.toHours(millisUntilFinished);
millisUntilFinished -= TimeUnit.HOURS.toMillis(hours);
long minutes = TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished);
millisUntilFinished -= TimeUnit.MINUTES.toMillis(minutes);
long seconds = TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished);
if (days == 0 && hours == 0 && minutes == 0) {
holder.forth.setText(seconds + "");
holder.third.setVisibility(View.GONE);
holder.second1.setVisibility(View.GONE);
holder.first.setVisibility(View.GONE);
Log.i("the time is ", "" + seconds + " " + holder.game_name.getText().toString());
} else if (days == 0 && hours == 0) {
holder.forth.setText(seconds + "");
holder.third.setText(minutes + "");
holder.second1.setVisibility(View.GONE);
holder.first.setVisibility(View.GONE);
Log.i("the time is ", "" + seconds + " " + minutes + " " + holder.game_name.getText().toString());
} else if (days == 0) {
holder.first.setVisibility(View.GONE);
holder.forth.setText(seconds + "");
holder.third.setText(minutes + "");
holder.second1.setText(hours + "");
Log.i("the time is ", "" + seconds + " " + minutes + " " + hours + " " + holder.game_name.getText().toString());
} else {
holder.forth.setText(seconds + "");
holder.third.setText(minutes + "");
holder.second1.setText(hours + "");
holder.first.setText(days + "");
Log.i("the time is ", "" + seconds + " " + minutes + " " + hours + " " + days + " " + holder.game_name.getText().toString());
}
}
@Override
public void onFinish() {
holder.third.setText("0");
holder.second1.setText("0");
holder.first.setText("0");
holder.forth.setText("0");
//int po = Integer.parseInt(model.getEntry_fee())*Integer.parseInt(model.getTotal_player());
// times_up(String.valueOf(model.getId()),String.valueOf(po));
}
};
holder.cdt.start();
}