2017-06-18 6 views
-1

私のコードにはonTickメソッドが表示されず、カウンタが実行されるたびに「終了」というテキストが表示されます。 endTime変数がタイマークラスに渡されていないようですか?私が紛失しているものについては、何か助けてください。カウントダウンタイマーが表示されないonTick

public class MainActivity extends AppCompatActivity { 

private long endTime; 
private MyTimer mainTimer; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    //Set up the two number pickers 
    NumberPicker minutes = (NumberPicker) findViewById(R.id.minutes); 
    pickerSetup(minutes); 
    NumberPicker seconds = (NumberPicker) findViewById(R.id.seconds); 
    pickerSetup(seconds); 

    mainTimer = new MyTimer(this, endTime, 1000); 
} 

public void pickerSetup(NumberPicker pickerId){ 
    pickerId.setMaxValue(60); 
    pickerId.setMinValue(0); 
    pickerId.setWrapSelectorWheel(true); 
} 

public void calcTime(View view){ 
    //Get value of Number pickers and convert to milliseconds from minutes and seconds. 
    NumberPicker minutes = (NumberPicker) findViewById(R.id.minutes); 
    int selectedMinutes = minutes.getValue() * 60000; 

    NumberPicker seconds = (NumberPicker) findViewById(R.id.seconds); 
    int selectedSeconds = seconds.getValue() * 1000; 

    //Add selected Minutes and seconds together 
    endTime = selectedMinutes + selectedSeconds; 
    Log.v("End time = ", String.valueOf(endTime)); 
    mainTimer.start(); 
} 
} 

タイマークラス:

class MyTimer extends CountDownTimer { 

private Context mContext; 
private TextView mToUpdate; 


public MyTimer(Context context, long startTime, long interval) { 
    super(startTime, interval); 
    mContext = context; 
    TextView toUpdate = (TextView) ((Activity)mContext).findViewById(R.id.intervalTimer); 
    mToUpdate = toUpdate; 
} 

@Override 
public void onTick(long millisUntilFinished) { 
    int seconds = (int) (millisUntilFinished/1000) % 60; 
    int minutes = (int) ((millisUntilFinished/(1000 * 60)) % 60); 
    mToUpdate.setText(String.valueOf(minutes) + ":" + String.valueOf(seconds)); 
} 

@Override 
public void onFinish() { 
    mToUpdate.setText("Done"); 
} 

} 

答えて

0

ときmainTimer = new MyTimer(this, endTime, 1000);を呼び出す時、あなたがたendTimeを初期化されていないので、それは起こります。 0に設定されているため、開始時に停止します。 2つの方法をこのように変更することができます。

public long calcTime(View view){ 
    //Get value of Number pickers and convert to milliseconds from minutes and seconds. 
    NumberPicker minutes = (NumberPicker) findViewById(R.id.minutes); 
    int selectedMinutes = minutes.getValue() * 60000; 

    NumberPicker seconds = (NumberPicker) findViewById(R.id.seconds); 
    int selectedSeconds = seconds.getValue() * 1000; 

    //Add selected Minutes and seconds together 
    endTime = selectedMinutes + selectedSeconds; 
    Log.v("End time = ", String.valueOf(endTime)); 
    return mainTimer.start(); 
} 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    //Set up the two number pickers 
    NumberPicker minutes = (NumberPicker) findViewById(R.id.minutes); 
    pickerSetup(minutes); 
    NumberPicker seconds = (NumberPicker) findViewById(R.id.seconds); 
    pickerSetup(seconds); 

    endTime=calcTime(); 
    mainTimer = new MyTimer(this, endTime, 1000); 
    mainTimer.start(); 
} 
関連する問題