java - A very simple stoper -


so 2 days ago i've started learning android technology. i've written simple program can count time using countdowntimer class. here xml code:

<relativelayout  xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#000000" tools:context=".mainactivity" android:id="@+id/raf">  <button     android:id="@+id/btnstart"     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:layout_alignparentleft="true"     android:layout_centervertical="true"     android:layout_marginleft="28dp"     android:textcolor="#76ee00"     android:background="#2c3529"     android:text="start" />  <button     android:id="@+id/btnstop"     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:layout_alignparentright="true"     android:layout_centervertical="true"     android:layout_marginright="28dp"     android:textcolor="#76ee00"     android:background="#2c3529"     android:text="stop" />   <textview     android:id="@+id/textviewhours"     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:layout_alignparentleft="true"     android:layout_centervertical="true"     android:layout_marginleft="100dp"     android:layout_margintop="25dp"     android:layout_below="@+id/btnstart"     android:layout_centerhorizontal="true"     android:layout_marginbottom="20dp"     android:textcolor="#76ee00"     android:textsize="25sp"     android:text="godziny:"     />  <textview     android:id="@+id/textviewminutes"     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:layout_alignparentleft="true"     android:layout_centervertical="true"     android:layout_marginleft="100dp"     android:layout_below="@+id/textviewhours"     android:layout_centerhorizontal="true"     android:layout_marginbottom="20dp"     android:textcolor="#76ee00"     android:textsize="25sp"     android:text="minuty:"     />  <textview     android:id="@+id/textviewseconds"     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:layout_margintop="5dp"     android:layout_alignparentleft="true"     android:layout_centervertical="true"     android:layout_marginleft="100dp"     android:layout_below="@+id/textviewminutes"     android:layout_centerhorizontal="true"     android:layout_marginbottom="20dp"     android:textcolor="#76ee00"     android:textsize="25sp"     android:text="sekundy:"     />  <textview     android:id="@+id/textviewtime"     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:layout_above="@+id/btnstop"     android:layout_centerhorizontal="true"     android:layout_marginbottom="17dp"     android:textcolor="#76ee00"     android:textsize="25sp"     />  <edittext     android:id="@+id/edithours"     android:numeric="integer"     android:layout_width="50dp"     android:layout_height="wrap_content"     android:layout_below="@+id/btnstop"     android:layout_centerhorizontal="true"     android:layout_alignparentleft="true"     android:layout_marginleft="220dp"     android:layout_margintop="35dp"     android:text="1"     android:background="#2c3529"     android:textcolor="#76ee00"     />  <edittext     android:id="@+id/editminutes"     android:numeric="integer"     android:layout_width="50dp"     android:layout_height="wrap_content"     android:layout_below="@+id/edithours"     android:layout_centerhorizontal="true"     android:layout_alignparentleft="true"     android:layout_marginleft="220dp"     android:layout_margintop="30dp"     android:text="0"     android:background="#2c3529"     android:textcolor="#76ee00"     />  <edittext     android:id="@+id/editseconds"     android:numeric="integer"     android:layout_width="50dp"     android:layout_height="wrap_content"     android:layout_below="@+id/editminutes"     android:layout_centerhorizontal="true"     android:layout_alignparentleft="true"     android:layout_marginleft="220dp"     android:layout_margintop="30dp"     android:text="0"     android:background="#2c3529"     android:textcolor="#76ee00"     /> 

and here have java code:

   package com.example.rafa.minutnik;  import android.annotation.suppresslint; import android.annotation.targetapi; import android.content.dialoginterface; import android.os.build; import android.os.countdowntimer; import android.support.v7.app.actionbaractivity; import android.os.bundle; import android.view.menu; import android.view.menuitem; import android.view.view; import android.widget.button; import android.widget.edittext; import android.widget.textview;  import java.util.concurrent.timeunit;  @targetapi(build.version_codes.kitkat) @suppresslint("newapi")  public class mainactivity extends actionbaractivity {      private button btnstart,btnstop;     private textview textviewtime;     private edittext edithours, editminutes, editseconds;     private int time;      public void reset(){         edithours.settext("");         editminutes.settext("");         editseconds.settext("");         textviewtime.settext("");     }      @override     public view findviewbyid(int id) {         return super.findviewbyid(id);     }      @override     protected void oncreate(bundle savedinstancestate) {         super.oncreate(savedinstancestate);         setcontentview(r.layout.activity_main);          btnstart = (button) findviewbyid(r.id.btnstart);         btnstop = (button) findviewbyid(r.id.btnstop);         textviewtime = (textview) findviewbyid(r.id.textviewtime);         edithours = (edittext) findviewbyid(r.id.edithours);         editminutes = (edittext) findviewbyid(r.id.editminutes);         editseconds = (edittext) findviewbyid(r.id.editseconds);          time = 3600*integer.parseint(edithours.gettext().tostring()) +                 60*integer.parseint(editminutes.gettext().tostring()) +                 integer.parseint(editseconds.gettext().tostring());          final counterclass timer = new counterclass(1000*time,1000);          btnstart.setonclicklistener(new view.onclicklistener() {              @override             public void onclick(view v) {                 timer.start();             }         });          btnstop.setonclicklistener(new view.onclicklistener() {              @override             public void onclick(view v) {                 timer.cancel();                 reset();             }         });     }      @targetapi(build.version_codes.kitkat)     @suppresslint("newapi")     public class counterclass extends countdowntimer{          public counterclass(long milisinfuture, long countdowninterval){              super(milisinfuture,countdowninterval);         }          @targetapi(build.version_codes.kitkat)         @suppresslint("newapi")         @override         public void ontick(long millisuntilfinished) {              long milis = millisuntilfinished;             string hms = string.format("%02d:%02d:%02d", timeunit.milliseconds.tohours(milis),             timeunit.milliseconds.tominutes(milis) - timeunit.hours.tominutes(timeunit.milliseconds.tohours(milis)),             timeunit.milliseconds.toseconds(milis) - timeunit.minutes.toseconds(timeunit.milliseconds.tominutes(milis)));              system.out.println(hms);             textviewtime.settext(hms);         }          @override         public void onfinish() {              textviewtime.settext("finished.");         }     }      @override     public boolean onoptionsitemselected(menuitem item) {         // handle action bar item clicks here. action bar         // automatically handle clicks on home/up button, long         // specify parent activity in androidmanifest.xml.         int id = item.getitemid();          //noinspection simplifiableifstatement         if (id == r.id.action_settings) {             return true;         }          return super.onoptionsitemselected(item);     } } 

but there 1 big drawback, can count time beginning value fixed. can see put new edittext fields change values of hours,minutes , seconds doesn't work , have no idea why.

any suggestion did wrong?

your timer fixed in beginning value because not initializing time value aging in click event of start button, that's why timer taking initial value.

hope class clarify this, replace oncreate method snippet in java class here changed start click event replace reset method

@override protected void oncreate(bundle savedinstancestate) {     super.oncreate(savedinstancestate);     setcontentview(r.layout.activity_main);      btnstart = (button) findviewbyid(r.id.btnstart);     btnstop = (button) findviewbyid(r.id.btnstop);     textviewtime = (textview) findviewbyid(r.id.textviewtime);     edithours = (edittext) findviewbyid(r.id.edithours);     editminutes = (edittext) findviewbyid(r.id.editminutes);     editseconds = (edittext) findviewbyid(r.id.editseconds);      btnstart.setonclicklistener(new view.onclicklistener() {          @override         public void onclick(view v) {             time = 3600 * integer.parseint(edithours.gettext().tostring())                     + 60                     * integer.parseint(editminutes.gettext().tostring())                     + integer.parseint(editseconds.gettext().tostring());              if (timer != null) {                 timer.cancel();                 timer = null;             }             timer = new counterclass(1000 * time, 1000);              timer.start();         }     });      btnstop.setonclicklistener(new view.onclicklistener() {          @override         public void onclick(view v) {             timer.cancel();             reset();         }     }); } public void reset() {     if (timer != null) {         timer.cancel();     }     edithours.settext("0");     editminutes.settext("0");     editseconds.settext("0");     textviewtime.settext("0"); } 

Comments

Popular posts from this blog

c# - Validate object ID from GET to POST -

node.js - Custom Model Validator SailsJS -

php - Find a regex to take part of Email -