2017-06-18 7 views
-1

Ich habe ein Problem, wo mein Code wird nicht die onTick-Methode angezeigt, und jedes Mal, wenn der Zähler ausgeführt wird, zeigt es einfach den Text "Fertig", wie es sollte, wenn es fertig ist . Es scheint, dass die endTime-Variable nicht an die Timer-Klasse übergeben wird? Jede Hilfe mit dem, was ich vermisse, wäre willkommen.Countdown-Timer wird nicht angezeigt 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(); 
} 
} 

Timer Klasse:

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"); 
} 

} 

Antwort

0

Es geschieht, weil Sie endTime nicht initialisiert werden, wenn die Zeit der mainTimer = new MyTimer(this, endTime, 1000); aufrufen. Es wird auf 0 gesetzt und deshalb stoppt es wie gestartet. Sie können die beiden Methoden in etwa so ändern.

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(); 
}