2016-04-09 9 views
0

もう一度質問があります...この日付のカウントダウンを修正するにはどうすればよいですか?アプリを起動するたびに、終了したことを表示します。私は将来のコードを記述すると、アプリケーションはそれも終了したことを表示します。手伝って頂けますか?日付カウントダウンのバグ

package lt.sviesioji.kdainiviesiojigimnazija; 


import android.os.CountDownTimer; 
import android.support.v4.app.Fragment; 
import android.os.Bundle; 
import android.support.v4.app.FragmentTransaction; 
import android.support.v7.app.AppCompatActivity; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Button; 
import android.widget.TextView; 

import java.util.Calendar; 
import java.util.concurrent.TimeUnit; 


/** 
* A simple {@link Fragment} subclass. 
*/ 

public class PagrindinisFragment extends Fragment { 


public PagrindinisFragment() { 
    // Required empty public constructor 
} 

Button k,f; 
TextView tv_countdown; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    final View rootView = inflater.inflate(R.layout.fragment_pagrindinis, container, 
      false); 

    ((AppCompatActivity)getActivity()).getSupportActionBar().setTitle("Kėdainių šviesioji gimnazija"); 

    tv_countdown = (TextView) rootView.findViewById(R.id.textView17); 

    Calendar start_calendar = Calendar.getInstance(); 
    Calendar end_calendar = Calendar.getInstance(); 

    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 
    end_calendar.set(2005, 07, 1); // 10 = November, month start at 0 = January 

    //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); 

      tv_countdown.setText(days + ":" + hours + ":" + minutes + ":" + seconds); //You can compute the millisUntilFinished on hours/minutes/seconds 
     } 

     @Override 
     public void onFinish() { 
      tv_countdown.setText("Finish!"); 
     } 
    }; 
    cdt.start(); 

    k = (Button) rootView.findViewById(R.id.button2); 
    k.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      Fragment newFragment = new KalendoriusFragment(); 
      FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
      transaction.replace(R.id.fragment_container, newFragment); 
      transaction.addToBackStack(null); 
      transaction.commit(); 
     } 
    }); 

    f = (Button) rootView.findViewById(R.id.button3); 
    f.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      Fragment newFragment = new FormulynasFragment(); 
      FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
      transaction.replace(R.id.fragment_container, newFragment); 
      transaction.addToBackStack(null); 
      transaction.commit(); 
     } 
    }); 
    return rootView; 
} 
} 
+0

@Titus、どこにこの行を置くことができますか?教えて頂けますか? – iBoucher

+0

私は答えを投稿しました。 – Titus

答えて

0

あなたがend_calendarの日付を変更する前に、total_millisを計算しています。つまり、total_millisは常に0に非常に近いでしょう。これを修正するには、差を計算する前にend_calendarのデータを設定するだけです。次に例を示します。

Calendar start_calendar = Calendar.getInstance(); 
Calendar end_calendar = Calendar.getInstance(); 
end_calendar.set(2016, 07, 1); // 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 

total_millisは正の数に設定されるように、私は2016に年(将来の日付)を変更しました。

+0

うん、うまくいきますが、時間が間違っています – iBoucher

+0

@iBoucher日付はこの行 'end_calendar.set(2016、07、1);'を使用して設定されていますので、要件ごとに変更してください。これが正しく機能するためには未来 – Titus

+0

ありがとう、仲間、私はちょうど悪いデータを書いて、私はそれを見ないが、今それは非常にうまく動作します。ありがとうございました! :) – iBoucher

関連する問題