【问题标题】:Continuous CountDownTimer Loop连续倒计时循环
【发布时间】:2016-09-25 19:16:19
【问题描述】:

我正在制作一个圣诞节倒计时应用程序,并且我拥有该应用程序工作的基础。它倒计时到代码中的指定日期。我想做的是每当计时器结束时,我想将日期设置为下一年并重新开始计时,这一切都无需用户做任何事情。

我尝试了一些方法,例如循环并在 onFinish() 方法中添加 cdt.start();,但似乎都不起作用。

如果有人能指导我正确的方向,将不胜感激。

谢谢

MainActivity.java

import android.app.PendingIntent;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.os.CountDownTimer;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.TextView;
import java.util.Calendar;
import java.util.List;
import java.util.concurrent.TimeUnit;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdView;
import com.parse.Parse;
import com.parse.ParseInstallation;

public class MainActivity extends AppCompatActivity {
    private PendingIntent pendingIntent;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //Creating the TextView for the countdown
        final TextView tv_countdown = (TextView) findViewById(R.id.countdown_text_view);

        //Set the Calendar Date and Time
        Calendar start_calendar = Calendar.getInstance();
        final Calendar end_calendar = Calendar.getInstance();
        end_calendar.set(2016, 11, 25, 24, 0, 0);// 10 = November, month start at 0 = January

        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

        //Convert the time from milliseconds to the correct time specified
        //1000 = 1 second interval
        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);

                //Set the TextVew output
                tv_countdown.setText(days + " Days" + "\n" + hours + " Hours" + "\n" + minutes + " Minutes" + "\n" + seconds + " Seconds"); //You can compute the millisUntilFinished on hours/minutes/seconds


            }

            @Override
            public void onFinish() {
                end_calendar.set(2017, 11, 25, 24, 0, 0);
            }


        };
        cdt.start();

【问题讨论】:

  • 你知道你不应该发布你的解析键吗?
  • 谢谢你提醒我@tynn!!
  • 它并没有真正消失。这里的一切都得到了修订。您可能想要创建一个新密钥。

标签: java android countdowntimer


【解决方案1】:

只是一个想法如何去做。为当年创建结束日期,如果已经过去,则为下一年创建。

Calendar start_calendar = Calendar.getInstance();
final Calendar end_calendar = Calendar.getInstance();
int year = start_calendar.get(YEAR);
end_calendar.set(year, 11, 25, 24, 0, 0);

long start_millis = start_calendar.getTimeInMillis();
long end_millis = end_calendar.getTimeInMillis();
long total_millis = (end_millis - start_millis);

if (total_millis < 0) {
    end_calendar.set(year + 1, 11, 25, 24, 0, 0);
    end_millis = end_calendar.getTimeInMillis();
    total_millis = (end_millis - start_millis);
}

【讨论】:

  • 这是个好主意,但是当倒计时结束时,它不会以新的日期重新开始。
  • onFinish() 中执行完全相同的操作。另外使用更多方法而不是在onCreate() 中做所有事情。
猜你喜欢
  • 2016-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-14
  • 1970-01-01
  • 2014-03-02
相关资源
最近更新 更多