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
Post a Comment