2016-10-23 8 views
1

私は初心者です。私はタイマーアプリを作成して、ユーザーが時刻を編集できるようにします。タイマーのアンドロイドビルドのように。私はコードを書いたが、それは編集できるようにショーを実際には働かないが、私が何かを書こうとしているとき、それは1秒間の変化で、前にあったものに戻る..タイマーがユーザーに編集されないようにする

xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/activity_stopwatch" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.adir.stopwatch.StopwatchActivity" 
    android:background="#000000" 

    > 

    <Button 
     android:id="@+id/reset_button" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:onClick="onClickReset" 
     android:text="@string/reset" 
android:textColor="#FFFFFF" 
     android:layout_below="@+id/stop_button" 
     android:layout_alignLeft="@+id/stop_button" 
     android:layout_alignStart="@+id/stop_button" /> 

    <EditText 
     android:id="@+id/time_view" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="17dp" 
     android:text="" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:textSize="92sp" 
     android:textColor="#FFFFFF" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" 

android:inputType="time" 
     /> 
    <Button 
     android:id="@+id/start_button" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:onClick="onClickStart" 
android:text="@string/start" 
     android:textColor="#FFFFFF" 
     android:layout_below="@+id/time_view" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="16dp" /> 

    <Button 
     android:id="@+id/stop_button" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:onClick="onClickStop" 
     android:text="@string/stop" 
     android:textColor="#FFFFFF" 
     android:layout_alignLeft="@+id/start_button" 
     android:layout_alignStart="@+id/start_button" 
     android:layout_below="@+id/start_button"></Button> 


</RelativeLayout> 

のJava:

public class StopwatchActivity extends Activity { 
    private int seconds=0; 
    private boolean running; 
private boolean wasRunning; 
public String time; 
    public int hours=seconds/3600; 
    public int minutes=(seconds%3600)/60; 
    public int secs=seconds%60; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_stopwatch); 
     if(savedInstanceState!=null){ 
      seconds=savedInstanceState.getInt("seconds"); 
      running=savedInstanceState.getBoolean("running"); 
      wasRunning=savedInstanceState.getBoolean("wasRunning"); 
     } 
     runTimer(); 
    } 

    public void onClickStart(View view) { 

     running = true; 
    } 
    protected void onStop(){ 
     super.onStop(); 
     wasRunning=running; 
     running=false; 
    } 

    protected void onStart() { 
    super.onStart(); 
     if(wasRunning){ 
      running=true; 
     } 
    } 

    public void onClickStop(View view) { 
     running = false; 


    } 

    public void onClickReset(View view) { 
     running = false; 
     seconds = 0; 
    } 

    private void runTimer() { 

     final EditText timeView = (EditText) findViewById(R.id.time_view); 
     time=timeView.getText().toString(); 
     final Handler handler = new Handler(); 
     handler.post(new Runnable() { 
      @Override 
      public void run() { 

       time = String.format("%d:%02d:%02d",hours, minutes, secs); 

       timeView.setText(time); 
       if (running) { 
        seconds--; 
       } 
       handler.postDelayed(this, 1000); 
      } 
     }); 


    } 
public void onSaveInstanceState(Bundle savedInstanceState){ 
    savedInstanceState.putInt("seconds",seconds); 
    savedInstanceState.putBoolean("running",running); 
    savedInstanceState.putBoolean("wasRunning",wasRunning); 
} 

    protected void onPause(){ 
     super.onPause(); 
     wasRunning=running; 
     running=false; 
    } 

    protected void onResume(){ 
     super.onResume(); 
     if(wasRunning){ 
      running=true; 
     } 
    } 


} 

私は修正するために何が必要ですか?

+0

タイマーをカウントダウンタイマーにしますか? – grant

+0

@ espa_networkはい。ユーザーは45秒のように書くとカウントダウンします – adir

+0

あなたは 'Timer'の代わりに' CountDownTimer'を使うべきです。私の答えを確認してください – grant

答えて

0

以下のコードは、何をすべきかの良いアイデアを提供します。ボタンをクリックすると、EditTextのテキストが取得され、文字列に挿入されます。その後、intに変換されます。次に、新しいint変数timeCountDownTimer関数の1番目のパラメータに入れて、タイマーの長さを設定します。

Button submit; 
    TextView timerText; 
    EditText editTextTime; 
    CountdownTimer yourTimer; 
    String timeString; 
    int time; 

    submit.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

    timeString = String.valueOf(editTextTime.getText()); 
    time = Integer.valueOf(timeString); 


     } 
    }); 


    yourTimer = new CountDownTimer(time, 1000) { 

    @Override 
    public void onTick(long millisUntilFinished) { 


     int seconds = (int) millisUntilFinished/1000; 
     int minutes = seconds/60; 
     seconds %= 60; 
     minutes %= 60; 


     if (seconds < 10 && seconds >= 1) { 
      timerText.setText("" + seconds); 
     } 
    } 

    @Override 
    public void onFinish() { 

    } 
}.start(); 
+0

編集のためにもう一つのボタンを追加しましたか?タイマーを押すだけでは編集できません。 – adir

関連する問題