2016-09-25 3 views
3

저는 크리스마스 카운트 다운 앱을 제작하고 있으며 앱 작동의 기초를 가지고 있습니다. 코드에서 지정된 날짜까지 카운트 다운됩니다. 타이머가 끝날 때마다 다음 해에 날짜를 설정하고 다시 시작해야합니다. 사용자가 아무것도하지 않아도됩니다.연속 CountDownTimer 루프

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(); 
+0

파스 키를 게시하면 안됩니다. – tynn

+0

@ tynn을 상기시켜 주셔서 감사합니다! –

+0

정말 사라지지 않았습니다. 여기에있는 모든 것이 개정됩니다. 새 키를 만들 수 있습니다. – tynn

답변

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); 
} 
+0

이것은 좋은 생각이지만, 카운트 다운이 끝나면 새로운 날짜로 다시 시작하지 않습니다. –

+0

'onFinish()'에서 똑같이하십시오. 또한'onCreate()'에서 모든 것을하는 대신 더 많은 메소드를 사용하십시오. – tynn