2016-06-26 69 views
3

嗨,大家好,我對android比較陌生。我認爲像定時器一樣創建一個簡單的應用程序將是一個很好的開始。我該如何修復我的重置按鈕?

我設法創建了我的簡單計時器應用程序,但遇到了一個問題。

我有我的應用程序啓動和暫停,但我不能弄清楚如何重置回爲「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); 
     } 

    }; 

} 

當我按下復位按鈕,它變成「00:00:00」,但是當我按下啓動按鈕計時器重新開始離開的地方。例如,如果計時器處於「00:05:123」狀態,請按復位鍵,它會變爲「00:00:00」,但是當我再次按下啓動鍵時,它會從停止的位置或者甚至更遠處的「 00:08:456「當我按下復位鍵後,它不會從零開始,然後重新開始。

有人可以幫我弄清楚我的重置按鈕嗎?

我已附加在其中,我認爲我的錯誤可能包括在上面的Java代碼的一些文件。

字符串xml文件。

<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> 

activity_main xml文件

<?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: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); 
    } 

}; 
:000因爲仍在後臺通過這個代碼運行所述第二線程更新

你應該考慮點擊這段代碼中的取消按鈕的可能性,並採取相應的行動。

,以檢查是否是這種情況的快速解決方案是將開始時間更改爲當前時間在onclick偵聽器取消按鈕。 時間應該設置在「00:00:000」附近。 如果是這種情況,那麼很容易找出一種使其完美運行的方法。

+0

你能告訴我怎麼去做這件事嗎?我試着做你說的和其他的東西,但我只是更困惑:(你能幫我嗎?謝謝!:) – AmateurProgrammer

+0

開始,更改取消按鈕監聽器:公共無效onButtonTapReset(視圖v) { timeInMilliseconds = SystemClock.uptimeMillis() - startTime; timerValue.setText(「00:00:00」); } – Nikos

+0

看看有沒有什麼結果 – Nikos