【问题标题】:Passing Countdown Timer beetwen Activities in Android在Android中的活动之间传递倒数计时器
【发布时间】:2014-11-25 15:02:54
【问题描述】:

我正在尝试将 CountDownTimer 值从 Activity 1(PrimerNivel) 传递到 Activity 2(SegundoNivel) 并从从Activity1.

但是Activity 2 中的CountDownTimer 被重置为零。我找不到错误。有人可以帮我吗?

这是代码 活动一:

public class PrimerNivel extends InicioActivity {
    private TextView cuentaRegresiva;
    long startTime = 60 * 1000;
    private final long interval = 1 * 1000;
    MyCountDownTimer countDownTimer;
    long tiempoRestante;


public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.juego);
    cuentaRegresiva=(TextView)findViewById(R.id.cuentaRegresiva);
    countDownTimer = new MyCountDownTimer(startTime, interval);
    cuentaRegresiva.setText(cuentaRegresiva.getText() + String.valueOf(startTime / 1000));

}

 public class MyCountDownTimer extends CountDownTimer {
              public MyCountDownTimer(long startTime, long interval) {
                  super(startTime, interval);

              }

                    @Override
                    public void onFinish() {
                        cuentaRegresiva.setText("");


                        }

                    @Override
                    public void onTick(long millisUntilFinished) {
                        tiempoRestante= millisUntilFinished;
                        cuentaRegresiva.setText(""+millisUntilFinished/1000);
                        }}
OnClickListener siguiente =new OnClickListener(){
                     public void onClick(View arg0) {

                         Intent aNivelSiguiente = new Intent(PrimerNivel.this, SegundoNivel.class);
                         aNivelSiguiente.putExtra("regresivaAnterior", tiempoRestante);
                        startActivity(aNivelSiguiente);
                        PrimerNivel.this.finish();




                                                      }};

           }

活动 2:

public class SegundoNivel extends InicioActivity {
    private TextView cuentaRegresiva;
    long startTime;
    private final long interval = 1 * 1000;
    MyCountDownTimer countDownTimer;
    Bundle bundle;


public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.juego);
    cuentaRegresiva=(TextView)findViewById(R.id.cuentaRegresiva);
    countDownTimer = new MyCountDownTimer(startTime, interval);


    bundle = getIntent().getExtras();
    startTime= bundle.getLong("regresivaAnterior")/1000;
    cuentaRegresiva.setText(""+startTime);
    countDownTimer.start(); 

}

public class MyCountDownTimer extends CountDownTimer {
              public MyCountDownTimer(long startTime, long interval) {
            super(startTime, interval);
              }
                    @Override
                    public void onFinish() {
                        cuentaRegresiva.setText("");        
                        }

                    @Override
                    public void onTick(long millisUntilFinished) {
                        cuentaRegresiva.setText(""+millisUntilFinished/1000);
                                    }}

【问题讨论】:

    标签: android android-activity countdown countdowntimer


    【解决方案1】:

    在获取值之前,您正在创建CountDownTimer。只需将创建计时器的代码移至获取值的位置下方即可。

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.juego);
        cuentaRegresiva=(TextView)findViewById(R.id.cuentaRegresiva);
    
        bundle = getIntent().getExtras();
        startTime= bundle.getLong("regresivaAnterior")/1000;
    
        // move it here after you've gotten the value
        countDownTimer = new MyCountDownTimer(startTime, interval);
        cuentaRegresiva.setText(""+startTime);
        countDownTimer.start(); 
    

    您可能需要取消第一个计时器才能在正确的时间获得正确的值。尝试调用

    countDownTimer.cancel();
    countDownTimer = null;
    

    在创建 Intent 之前。此外,在从 Intent 获得值后,您将 startTime 除以 1000。我不确定你想这样做。

    【讨论】:

    • 你能再解释一下吗?从哪里消失?
    • 抱歉,在第二个活动中,textView 以第一个活动的值出现一秒钟,但立即消失。这与我遇到的错误相同。
    • 检查您在Intent 中获得的值或更改您的TextView 以在onFinish() 中显示类似“已完成”的内容。它可能按预期工作,但您使用的时间太短,因此它会快速调用onFinish() 并将文本设置为空String
    • 谢谢,你是对的,但是我该如何解决呢?时间间隔和第一个活动一样。对不起,我是初学者
    • 我不确定你想要什么?当您单击按钮时,它是否传递了您期望的值?如果是这样,那么我没有看到问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-19
    • 2014-12-08
    • 2012-08-29
    • 2011-10-06
    • 2018-10-08
    相关资源
    最近更新 更多