質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

解決済

1回答

4082閲覧

Androidのタイマーリセットで表示を00:00:00にする方法

kokemomo

総合スコア17

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2015/08/21 22:41

以下のandroidのプログラムで
リセットボタンを押すと
00:00:00と表示するようにしたいのですが

00:00:06とか
00:00:08などの表示になってしまいます。
解決法を教えていただけないでしょうか?

*ストップボタンを追加して
ストップボタンを押した後、リセットボタンを押す
というのは無しで、お願いします。

開発環境:win7
eclipse
Version: Luna Service Release 2 (4.4.2)
エミュレータで確認しました。
実機では未確認です。

宜しくお願いします。

public class StopWatch extends Activity { /** Called when the activity is first created. */ boolean p = false; public static int m = 0; public static int s = 0; public static int ms = 0; String m0="0"; String s0="0"; String ms0="0"; private Button startbtn;//スタートボタン private Button resetbtn;//リセットボタン Timer timer = null; //タイマを定義 TextView mDisplayText; //表示領域 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //結果の表示先 mDisplayText = (TextView)findViewById(R.id.TextView01); startbtn = (Button)findViewById(R.id.Button01); resetbtn = (Button)findViewById(R.id.Button03); //スタートボタンクリック startbtn.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { if(p==false){ //Timerを設定する timer = new Timer(true); final android.os.Handler handler = new android.os.Handler(); timer.schedule( new TimerTask() { @Override public void run() { handler.post( new Runnable(){ public void run(){ ms++; if(ms==100){s=s+1; ms=0; ms0="0";} if(s==60){m=m+1; s=0; s0="0"; ms0="0";} if(m==60){s0="0"; ms0="0";} if(ms>=10){ms0="";} if(s>=10){s0="";} if(m>=10){m0="";} mDisplayText.setText(m0+m+":"+s0+s+":"+ms0+ms); } }); } }, 10, 10); //初回起動の遅延と周期指定。単位はms p=true; } } }); // リセットボタンクリック resetbtn.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { if(p==true && timer != null){ timer.cancel(); timer = null; //カウント値の初期化 m0="0"; s0="0"; ms0="0"; m = 0; s = 0; ms = 0; p=false; mDisplayText.setText("00:00:00"); } } }); } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Timerの停止要求をかけてから、実際にタイマーが停止するまでの間、
タイマーが動いてこの現象が発生しているかと思います。

記載のコードでは停止要求時に「timer=null」を最初にセットしているので、
タイマー処理で「timer != null」の場合のみ「ms++」以降の処理を
行うようにする等の対策をすれば解決出来るかと思います。

投稿2015/08/21 23:07

horohoro

総合スコア490

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kokemomo

2015/08/21 23:26

できました!ありがとうございます! 原因も解説していただき、ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問