2016-06-26 4 views
3

Эй, ребята, я относительно новичок в андроиде. Я думал, что создание простого приложения, такого как таймер, станет отличным началом.Как я могу исправить мою кнопку сброса?

Мне удалось создать мое приложение простого таймера, но я столкнулся с проблемой.

У меня есть приложение для начала и паузы, но я не могу понять, как вернуть его обратно в «00:00:00». Я пробовал следующее в строках 56-59 в своем java-коде.

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: 000, так как по-прежнему обновляется в фоновом режиме, второй нитью проходит через этот код:

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

}; 

Вы должны рассмотреть возможность нажатия кнопки отмены в этом фрагменте кода и действовать соответствующим образом.

Быстрое решение, чтобы проверить, действительно ли это так, - изменить startTime на текущее время в OnClick Listener для кнопки отмены. Время следует установить рядом с «00: 00: 000». Если это так, то легко понять, как заставить его работать отлично.

+0

Не могли бы вы показать мне, как я могу это сделать? Я попытался сделать то, что вы сказали, и другие вещи, но я просто стал больше смущен :(не могли бы вы мне помочь? Спасибо! :) – AmateurProgrammer

+0

для начала, измените прослушиватель кнопки отмены на: public void onButtonTapReset (View v) { timeInMilliseconds = SystemClock.uptimeMillis() - startTime; timerValue.setText ("00:00:00"); } – Nikos

+0

и посмотреть, нет ли результата – Nikos

Смежные вопросы