У меня есть представление списка, которое я хотел бы содержать таймер. Таймеры заканчиваются в зависимости от даты, которую мне возвращает API. Я собираюсь прикрепить большую часть моего Адаптера, но я удалил много другой чепухи, которая ничего не делает с другой информацией, которую показывают.
public class EbayItemListAdapter extends ArrayAdapter<EbayItemModel> {
private static final String TAG = "EbayItemListAdapter";
private Handler handler;
private Runnable runnable;
private CountDownTimer countDownTimer;
private String listingTypeString = null;
private String bestOfferEnabledString = null;
private Activity activity;
public EbayItemListAdapter(Context context, ArrayList<EbayItemModel> ebayItemModel) {
super(context, 0, ebayItemModel);
this.context = context;
}
@Override
public View getView(int position, View view, ViewGroup parent) {
final EbayItemModel ebayItemModel = getItem(position);
if (view == null) {
view = LayoutInflater.from(getContext()).inflate(R.layout.ebay_list_view_adapter, parent, false);
}
sharedPreferences = getContext().getSharedPreferences(Constants.SHARED_PREF, MODE_PRIVATE);
LinearLayout activeListingLayout = view.findViewById(R.id.activeListingLayout);
activeListingLayout.setVisibility(View.GONE);
final LinearLayout mainLayout = view.findViewById(R.id.mainLayout);
final TextView ebayTimeLeft = view.findViewById(R.id.ebay_time_left);
if(ebayItemModel.getTypeOfListing().equals(Constants.ACTIVE)) {
activeListingLayout.setVisibility(View.VISIBLE);
//puts the timer into the ebayTimeLeft Text View
countDownStart(ebayItemModel.getDateLeft(), ebayTimeLeft);
} else {
activeListingLayout.setVisibility(View.GONE);
mainLayout.getLayoutParams().height = LinearLayout.LayoutParams.MATCH_PARENT;
mainLayout.requestLayout();
}
return view;
}
public void countDownStart(final String dateLeft, final TextView textView) {
handler = new Handler();
runnable = new Runnable() {
@Override
public void run() {
handler.postDelayed(this, 1000);
try {
String date = dateLeft;
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.000'Z'");
Date newDate = dateFormat.parse(date);
dateFormat= new SimpleDateFormat("MM dd, yyyy HH:mm:ss");
date = dateFormat.format(newDate);
Date futureDate = dateFormat.parse(date);
Date currentDate = new Date();
if (!currentDate.after(futureDate)) {
long diff = futureDate.getTime() - currentDate.getTime();
long days = diff / (24 * 60 * 60 * 1000);
diff -= days * (24 * 60 * 60 * 1000);
long hours = diff / (60 * 60 * 1000);
diff -= hours * (60 * 60 * 1000);
long minutes = diff / (60 * 1000);
diff -= minutes * (60 * 1000);
long seconds = diff / 1000;
textView.setText(String.format("%02dd %02dh %02dm %02ds left", days, hours, minutes, seconds));
if (days == 0) {
textView.setText(String.format("%02dh %02dm %02ds left", hours, minutes, seconds));
}
if (hours == 0) {
textView.setText(String.format("%02dm %02ds left", minutes, seconds));
}
if (minutes == 0) {
textView.setText(String.format("%02ds left", seconds));
}
} else {
textView.setText("ENDED");
}
} catch (Exception e) {
e.printStackTrace();
}
}
};
handler.postDelayed(runnable, 1 * 1000);
}
}
То, что происходит, - это времена не идем к нужному пункту списка. При прокрутке он сбрасывается или становится больше, меньше и т. Д. c. Как мне сделать так, чтобы у каждого элемента списка был свой таймер. Это прекрасно работает, когда список содержит ограниченные элементы.