在Android中创建Singleton CountDownTimer

时间:2013-12-20 22:05:18

标签: java android sdk countdowntimer

我是android的初学者,我写了一个活动。它包含一个CountDownTimer,它从特定值开始倒计时。它还包含一个加载文本信息的Button和一个显示计数的textview。

以下是Activity1的代码:

public class Screen extends Activity1 implements OnClickListener {  
private static final int MILLIS_PER_SECOND = 1000;  
private static final int SECONDS_TO_COUNTDOWN = 1;  
TextView Time;  
int totaltime;  
Button startTimer, howTo, pause;  
protected CountDownTimer MyTimer;  
int PracticeCount;  
long tot;  

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.pushupscreen);
    getRefs();
    getSpeed();
            getCount();
    setTotalTime();
    startTimer.setOnClickListener(this);
    pause.setOnClickListener(this);
}

private void getRefs() {
    // Initialize layout resources
    Time = (TextView) findViewById(R.id.tvTime);

    startTimer = (Button) findViewById(R.id.bStart);
    howTo = (Button) findViewById(R.id.btHowTo);
    pause = (Button) findViewById(R.id.bPause);
    howTo.setOnClickListener(this);

}

  private void getTheCount() { 
 //get count from SharedPreferences
      }



  private void getSpeed() { 
   //get speed from SharedPreferences
          } 

 private void setCount(){
        totalTime=speed*count;}


@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    if (v == startTimer) {

        try {
            showTimer(time);

        } catch (NumberFormatException e) {
            // method ignores invalid (non-integer) input and waits
            // for something it cant use
        }
    } else if (v == pause) {
        MyTimer.cancel();
        Timer.setText("Resume");
    } else if (v == howTo) {

        //Launch screen containing information
    }
}

private void showTimer(long time) {
    if (MyTimer != null) {
        MyTimer.cancel();
    }

    MyTimer = new CountDownTimer(tot2, MILLIS_PER_SECOND) {
        @Override
        public void onTick(long millisUntilFinished) {
            tot = millisUntilFinished;
            long seconds = millisUntilFinished / 1000;
            Time.setText(String.format("%02d", seconds / 60) + ":"
                    + String.format("%02d", seconds % 60));

        }

        @Override
        public void onFinish() {
            Time.setText("KABOOM!");

        }
    }.start();
}

}

以下是此布局文件:
        

<TextView
    android:id="@+id/tvTime"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:gravity="center"
    android:padding="10dip"
    android:text="@string/starttime"
    android:textSize="60sp" />

<Button
    android:id="@+id/bStart"
    android:layout_width="150dp"
    android:layout_height="wrap_content"
    android:layout_above="@+id/tvTime"
    android:text="Start" />

<Button
    android:id="@+id/bPause"
    android:layout_width="150dp"
    android:layout_height="wrap_content"
    android:layout_above="@+id/tvTime"
    android:layout_toRightOf="@+id/btHowTo"
    android:text="Pause" />

<TextView
    android:id="@+id/tvCount"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/btHowTo"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="39dp"
    android:text="25" 
    android:textSize="80sp"
    android:textAlignment="center"/>

我的问题:

1.如何创建4个使用相同布局和相同计时器的活动?每个活动在textview中加载不同的内容,在点击HowTo按钮时加载不同的屏幕 2. Activity1如何设计为运行时间的1/4并将剩余时间传递给Activity2?可能吗?

我非常感谢您提供的任何帮助和建议。感谢。

2 个答案:

答案 0 :(得分:1)

这里有几件事。

  1. 它很容易重复使用布局。在每个活动的onCreate中你只需要打电话: 的setContentView(R.layout.pushupscreen); pushupscreen.xml文件可以通过这种方式在所有活动中共享。

  2. 您可能想要做的是为所有活动的某些常见数据源保留时间戳。这可能是对SharedPreferences文件的写入:Documentation here。然后,当每个活动恢复时,通过将此时间戳与当前时间戳进行比较来检查已经过了多少时间。您还可以将时间戳作为额外内容传递给意图以启动后续活动。可以在herehere

  3. 找到相关文档

答案 1 :(得分:0)

  1. 您可以创建一个自定义控件,它基本上是一个继承其他控件类的新类(例如LinearLayout或RelativeLayout)。然后,您可以将视图的XML加载到新布局中,或者以编程方式在控件内创建新控件。更多信息: Custom components in Android

  2. 在倒计时1/4后,您可以创建并发送Intent以在onTick方法中启动新活动。您还可以将剩余的3/4作为毫秒值(类型long)放入intent extra中。然后,您可以在新活动中获取此值,并在其余的倒计时中调用自定义CountDownTimer子项。然后你可以在onFinish()方法完成倒计时之后最终执行你想要的东西。