2016-06-26 20 views
3

こんにちは私はアンドロイドに比較的新しいです。私は、タイマーのような簡単なアプリを作ることが始めるのに最適な方法だと思っていました。リセットボタンはどのように修正できますか?

私は単純なタイマーアプリケーションを作成することができましたが、問題が発生しました。

私は自分のアプリを起動して一時停止することができましたが、「00:00:00」にリセットする方法はわかりません。私は私のJavaコードの56〜59行目で以下を試しました。

package com.awesomeapps.misael.timer; 

import android.app.Activity; 
import android.os.Bundle; 
import android.os.Handler; 
import android.os.SystemClock; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 

public class MainActivity extends Activity { 

    private Button startButton; 
    private Button pauseButton; 

    private TextView timerValue; 

    private long startTime = 0L; 

    private Handler customHandler = new Handler(); 

    long timeInMilliseconds = 0L; 
    long timeSwapBuff = 0L; 
    long updatedTime = 0L; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     timerValue = (TextView) findViewById(R.id.timerValue); 

     startButton = (Button) findViewById(R.id.startButton); 

     startButton.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View view) { 
       startTime = SystemClock.uptimeMillis(); 
       customHandler.postDelayed(updateTimerThread, 0); 

      } 
     }); 

     pauseButton = (Button) findViewById(R.id.pauseButton); 

     pauseButton.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View view) { 

       timeSwapBuff += timeInMilliseconds; 
       customHandler.removeCallbacks(updateTimerThread); 

      } 
     }); 
    } 
    public void onButtonTapReset(View v) 
    { 
     timerValue.setText("00:00:00"); 
    } 

    private Runnable updateTimerThread = new Runnable() { 

     public void run() { 

      timeInMilliseconds = SystemClock.uptimeMillis() - startTime; 

      updatedTime = timeSwapBuff + timeInMilliseconds; 

      int secs = (int) (updatedTime/1000); 
      int mins = secs/60; 
      secs = secs % 60; 
      int milliseconds = (int) (updatedTime % 1000); 
      timerValue.setText("" + mins + ":" 
        + String.format("%02d", secs) + ":" 
        + String.format("%03d", milliseconds)); 
      customHandler.postDelayed(this, 0); 
     } 

    }; 

} 

私は私のリセットボタンを押すと、それは「午後12時○○分00秒」に変わりありませんが、私のスタートボタンを押したときに、それが中断したところ、タイマーが再開されます。たとえば、タイマーが「00:05:123」の場合、リセットボタンを押すとリセットされ、「00:00:00」に変更されますが、スタートをもう一度押すと、中止された箇所が選択されるか、 00:08:456 "私はリセットを押してからもう一度やり直すとゼロから始まることはありません。

誰かがリセットボタンを見つけられるように助けてくれますか?

私は上記のJavaコードを含むことに私のエラーがあると思われるいくつかのファイルを添付しました。

文字列xmlファイル。 xmlファイルactivity_main

<resources> 
    <string name="app_name">Timer</string> 
    <string name="action_settings">Settings</string> 
    <string name="hello_world">Hello world!</string> 
    <string name="timerVal">00:00:00</string> 
    <string name="pauseButtonLabel">Pause</string> 
    <string name="startButtonLabel">Start</string> 
</resources> 

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:background="#000000" 
    android:layout_height="match_parent" > 
    <TextView 
     android:id="@+id/timerValue" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_above="@+id/pauseButton" 
     android:layout_centerHorizontal="true" 
     android:layout_marginBottom="37dp" 
     android:textSize="40sp" 
     android:textColor="#ffffff" 
     android:text="@string/timerVal" /> 
    <Button 
     android:id="@+id/startButton" 
     android:layout_width="90dp" 
     android:layout_height="45dp" 
     android:layout_alignParentLeft="true" 
     android:layout_centerVertical="true" 
     android:layout_marginLeft="38dp" 
     android:text="@string/startButtonLabel" /> 
    <Button 
     android:id="@+id/pauseButton" 
     android:layout_width="90dp" 
     android:layout_height="45dp" 
     android:layout_alignBaseline="@+id/startButton" 
     android:layout_alignBottom="@+id/startButton" 
     android:layout_alignParentRight="true" 
     android:layout_marginRight="38dp" 
     android:text="@string/pauseButtonLabel" /> 

    <Button 
     android:id="@+id/buttonReset" 
     android:layout_width="90dp" 
     android:layout_height="45dp" 
     android:text="Reset" 
     android:layout_below="@+id/timerValue" 
     android:layout_centerHorizontal="true" 
     android:onClick="onButtonTapReset" /> 
</RelativeLayout> 

私は私の質問が長い知っているが、私は詳細なものが好きです。

私は本当に皆さんが私を助けてくれることを願っています。

ご協力いただければ幸いです。ありがとう! :)ユーザがキャンセルボタンをクリックすると

答えて

0

、ビューのテキストを一時的に00に設定されている:まだこのコードを実行して第二のスレッドによってバックグラウンドで更新されているため、000:00

entprivate Runnable updateTimerThread = new Runnable() { 

    public void run() { 

     timeInMilliseconds = SystemClock.uptimeMillis() - startTime; 

     updatedTime = timeSwapBuff + timeInMilliseconds; 

     int secs = (int) (updatedTime/1000); 
     int mins = secs/60; 
     secs = secs % 60; 
     int milliseconds = (int) (updatedTime % 1000); 
     timerValue.setText("" + mins + ":" 
       + String.format("%02d", secs) + ":" 
       + String.format("%03d", milliseconds)); 
     customHandler.postDelayed(this, 0); 
    } 

}; 

このコードでキャンセルボタンを押して、それに応じて行動する可能性を考慮する必要があります。

これは、キャンセルボタンのOnClickリスナーでstartTimeを現在の時刻に変更することです。 時刻は「00:00:000」の近くに設定する必要があります。 これが当てはまる場合、完全に動作させる方法を見つけるのは簡単です。

+0

これを行う方法について私に教えてください。私は、あなたが言ったことや他のことをやってみたが、ちょっと混乱してしまった:(お手伝いできますか?ありがとう!) – AmateurProgrammer

+0

キャンセルボタンリスナーを次のように変更します:public void onButtonTapReset(vを表示) { timeInMilliseconds = SystemClock.uptimeMillis() - startTime; timerValue.setText( "00:00:00"); } – Nikos

+0

と結果があるかどうかを確認 – Nikos

関連する問題