转换常见的Android倒数计时器示例以接受用户输入

时间:2014-01-17 01:50:04

标签: java android countdowntimer

学习ADT,主要来自xCode和Linux(首选Nano),来自C / HTML / CSS / JS背景。我有一些麻烦适应,并希望我可以得到一些指示如何围绕这些非常简单的第一步的差异。

我正在使用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的定义从public long更改为private final 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 然后将其分配给startTime,从崩溃的onCreateonClick(从最初定义的startTime值开始倒计时)调用它。)我也是尝试将其作为onCreate中的直接代码段,因此最后一行看起来像: startTime = (Long.valueOf(myInt) * 1000); 在致电countDownTimer = new MyCountDownTimer(startTime, interval);之前,这又让您输入文字,但不会从我认为已分配给startTime变量的内容开始倒计时。

我还尝试了一下Ken Wolf答案的变体: Android java EditText to int 将try-and-catch放在onCreate中,但是当您点击开始按钮时,可以再次输入一个时间而不会倒计时。

如果您已经选择阅读所有这些,谢谢,我会请求您在回答这个问题时专注于两件事。首先,对于经验丰富的Java程序员来说,这看起来很简单,您会如何处理?其次,对于我正在考虑的C / JavaScript思维模式中缺少的Android Java的思考方式是什么?

谢谢。

1 个答案:

答案 0 :(得分:0)

我找到了你的问题,因为我在倒数计时器时遇到了另一个问题。如果您只是想让计时器使用用户输入和开始时间,则以下内容可能有用。倒计时器显然只接受longs作为开始时间。

   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;