2014-01-15 2 views
0

그래서 저는 스톱워치와 같은 타이머를 만들려고 노력하고 있지만 완전한 멍청한 행동입니다. 나는 HereHere에서 "결합"하려고했습니다.사용자 입력 및 타이머 (java android app)

목표는 타이머를 설정하려는 기간에 대한 사용자 입력을받는 것입니다. 그러면 시간이 다되었을 때 물건이됩니다. 주의 할

package com.example.timer; 

import android.app.Activity; 
import android.os.Bundle; 
import android.os.CountDownTimer; 
import android.view.Menu; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 

public class MainActivity extends Activity { 
private CountDownTimer countDownTimer; 
private boolean timerHasStarted = false; 
public TextView text; 
private final long interval = 1 * 1000; 
EditText editTime1; 
Button startButton; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    editTime1 = (EditText)findViewById(R.id.editTime1);  
    startButton = (Button)findViewById(R.id.startButton); 
    text = (TextView) this.findViewById(R.id.timer); 
    startButton.setOnClickListener(new OnClickListener() { 

     public void onClick(View v) { 
      //get the name from edittext and storing into string variable 
      long timeVal = Long.parseLong(editTime1.getText().toString()); 
      countDownTimer = new MyCountDownTimer(timeVal, interval); 
      text.setText(text.getText() + String.valueOf(timeVal/1000)); 

      if (!timerHasStarted) { 
        countDownTimer.start(); 
        timerHasStarted = true; 
        startButton.setText("STOP"); 
        } else { 
        countDownTimer.cancel(); 
        timerHasStarted = false; 
        startButton.setText("RESTART"); 
        } 
      } 
     class MyCountDownTimer extends CountDownTimer { 
      public MyCountDownTimer(long timeVal, long interval) { 
      super(timeVal, interval); 
      } 

      @Override 
      public void onTick(long millisUntilFinished) { 
      text.setText("" + millisUntilFinished/1000); 
      } 
      @Override 
      public void onFinish() { 
      text.setText("Times up"); 
      } 
     } 
     }); 
} 
@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 
} 
+0

이 코드의 문제점은 무엇입니까? – SoulRayder

+0

카운트 다운되지 않습니다. 버튼이 멈추도록 바뀌지 만 카운트 다운 대신 "타임업"이 표시됩니다. 버튼을 다시 누르면 다시 시작되고 "Times up0"이 표시됩니다. – cflinspach

답변

0

몇 가지 :

이것은 내가 지금까지있는 것입니다.

  1. 활동은 시작 시간을 밀리 초 단위로 예상합니다. 입력 값이 1000보다 큰 경우 (예 : 10 초, 즉 10000) 앱에 카운트 다운이 표시됩니다.

  2. 다음 두 줄은 잘못 배치됩니다.

    countDownTimer = new MyCountDownTimer(timeVal, interval); 
    text.setText(text.getText() + String.valueOf(timeVal/1000)); 
    

    카운트 다운이 시작될 때만 실행되어야합니다. 그러나 주어진 구현에서는 시작과 중지 모두에서 실행됩니다.

결과적으로 카운트 다운이 중지되고 countDownTimer.cancel();이 (가) 발생하면 새 MyCountDownTimer가 만들어집니다. 원래 개체가 아니라이 새 개체에서 호출됩니다. 카운트 다운이 계속됩니다.

setText는 start 및 stop에서 모두 수행되므로 timeVal이 출력에 추가됩니다. 이로 인해 "Times up0"이 발생했습니다.

업데이트 된 onClick 메서드는 다음과 같습니다.

public void onClick(View v) { 
     // get the name from edittext and storing into string variable 
     long timeVal = Long.parseLong(editTime1.getText().toString()); 

     if (!timerHasStarted) { 
      countDownTimer = new MyCountDownTimer(timeVal, interval); 
      text.setText(text.getText() + String.valueOf(timeVal/1000)); 
      countDownTimer.start(); 
      timerHasStarted = true; 
      startButton.setText("STOP"); 
     } else { 
      countDownTimer.cancel(); 
      timerHasStarted = false; 
      startButton.setText("RESTART"); 
     } 
    } 
+0

네일 (Nailed it), 이제 저는 첫 번째 요점을 정리할 필요가 있습니다. 상세한 답변을 해주셔서 감사합니다! – cflinspach