ListView с таймером обратного отсчета - PullRequest
0 голосов
/ 01 апреля 2020

У меня есть представление списка, которое я хотел бы содержать таймер. Таймеры заканчиваются в зависимости от даты, которую мне возвращает 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. Как мне сделать так, чтобы у каждого элемента списка был свой таймер. Это прекрасно работает, когда список содержит ограниченные элементы.

...