2016-10-23 2 views
1

Ich bin ein Anfänger und ich baue eine Timer-App, und ich möchte die App dem Benutzer erlauben, die Zeit zu bearbeiten. wie im Android-Build-Timer. und ich schrieb den Code und es nicht wirklich funktioniert es zeigt, wie es zu bearbeiten sein kann, aber wenn ich versuche, etwas zu schreiben, ist es Änderung für eine Sekunde und gehen Sie zurück zu dem, was es vorher gewesen ist ..Der Timer lässt den Benutzer nicht bearbeiten

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


} 

Was muss ich beheben?

+0

Möchten Sie, dass der Timer ein Countdown-Timer ist? – grant

+0

@espa_network ja. so wird der Benutzer wie 45 Sekunden schreiben und es wird – adir

+0

countdown Sie sollten 'CountDownTimer' anstelle von' Timer' verwenden. Überprüfen Sie meine Antwort – grant

Antwort

0

Der folgende Code gibt Ihnen eine gute Vorstellung davon, was zu tun ist. Wenn Sie auf die Schaltfläche klicken, wird der Text des EditText abgerufen und in eine Zeichenfolge eingefügt. Dann wird es in int umgewandelt. Dann können Sie die neue int-Variable time in den ersten Parameter Ihrer CountDownTimer-Funktion einfügen, um die Länge des Timers festzulegen.

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

Sie haben eine weitere Schaltfläche zum Bearbeiten hinzugefügt? es ist nicht möglich, nur auf den Timer zu drücken, und es wird mich bearbeiten lassen? – adir

Verwandte Themen