[英]Converting common Android countdown timer example to accept user input
学习ADT,主要来自xCode和Linux中的C / HTML / CSS / JS背景(Nano优先)。 我在适应过程中遇到了一些麻烦,希望我能在如何通过这些非常简单的第一步解决不同问题时获得一些指导。
我正在使用Wagied Davids“ Android Cookbook”示例中的一种非常常见的变体形式:
http://androidbite.blogspot.com/2012/11/android-count-down-timer-example.html
我的自定义任务是将其用作简单的egg-timer应用程序的基础(返回FroYo),在该应用程序中,用户在EditText中输入要从其倒数的时间(而不是固定的30秒)。
我对布局进行了以下更改:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/instruction"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:text="Enter countdown time:"
android:textSize="25sp" />
<TextView
android:id="@+id/timer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:paddingRight="10dip"
android:textSize="50dp" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:padding="10dip"
android:text="Start" />
<--Here's the part I added, SO!-->
<EditText
android:id="@+id/time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/instruction"
android:layout_centerHorizontal="true"
android:ems="10"
android:imeOptions="actionGo"
android:inputType="number" />
</RelativeLayout>
但是主要的Java活动的下一步使我难以理解。 我将startTime
的定义从private final long
更改为public long
,并且基本上一直在使用如下代码块:
//get countdown interval from user
EditText myEdit = (EditText) findViewById(R.id.time);
//convert edit text to string
String numString = myEdit.getText().toString();
//convert string to integer
myInt = Integer.parseInt(numString);
//convert integer to long number of milliseconds
long localStartTime = (Long.valueOf(myInt) * 1000);
我试着在活动文件中将其localStartTime
自己的类,然后将localStartTime
返回,然后将其分配给startTime
,从崩溃的onCreate
和onClick
(仅从startTime
的初始定义值开始递减)调用它。还尝试了它作为onCreate
的直接代码段,因此最后一行看起来像: startTime = (Long.valueOf(myInt) * 1000);
在调用countDownTimer = new MyCountDownTimer(startTime, interval);
但这只是允许您输入文本,但不会因为我认为我分配给startTime
变量的内容而倒计时。
我还在Ken Wolf的答案上尝试了一种变体: Android java EditText将int放置在onCreate
的try-and-catch,但是当您按下开始按钮时,也可以输入一个时间而不用倒计时。
如果您已经选择阅读所有这些内容,那么谢谢您,我想请您在回答这个问题时专注于两件事。 首先,对于经验丰富的Java程序员来说,看起来似乎很简单,那么您将如何处理呢? 其次,在阻碍我前进的C / JavaScript心态中,我缺少关于Android Java的思考方式是什么?
谢谢。
由于倒数计时器存在另一个问题,因此我找到了您的问题。 如果您只是想让计时器使用用户输入的开始时间,则以下内容可能会有用。 倒数计时器显然只接受long作为开始时间。
EditText timetocountdown = (EditText)findViewById(R.id.userinput);
String tmrstring = timetocountdown.getText().toString();
Long A = Long.parseLong(tmrstring);
startTime = (A * 60000);
countDownTimer = new MyCountDownTimer( startTime, interval);
countDownTimer.start();
timerHasStarted = true;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.