1

我正在尝试将 countdownTimer 值从活动 1 传递到活动 2,并从活动 1 获得的值启动活动 2 中的倒数计时器,但我不知道如何为活动 2 中的计时器作为变量,这是我的活动 1 代码

    new CountDownTimer(20000, 1000) {
        public void onTick(long millisUntilFinished) {
            tv.setText("seconds remaining: " + millisUntilFinished / 1000);

        }
        public void onFinish() {
            tv.setText("done!");
        }
     }.start();

    next.setOnClickListener(new OnClickListener(){
        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            Intent i = new Intent(MainActivity.this, Page2.class);
            i.putExtra("timervalue", tv.getText());
            startActivity(i);
        }

    });

这是活动 2 中的代码

    Bundle bundle = getIntent().getExtras();  
    long value = Long.parseLong(bundle.getString("timervalue"));
    new CountDownTimer(value, 1000) {
        public void onTick(long millisUntilFinished) {
            tv.setText("seconds remaining: " + millisUntilFinished / 1000);
        }
        public void onFinish() {
            tv.setText("done!");
        }
     }.start();  

我还尝试通过使用 Intet 而不是 Bundle 来制作这样的活动 2

    Intent results = this.getIntent();
    String s = results.getExtras().getString("timervalue");
    long value = Long.parseLong(s);

    new CountDownTimer(value, 1000) {
        public void onTick(long millisUntilFinished) {
            tv.setText("seconds remaining: " + millisUntilFinished / 1000);
        }
        public void onFinish() {
            tv.setText("done!");
        }
     }.start();  

我认为当我 putExtra 和 getExtra 时出现错误但我不确定,我真的是 java 的初学者所以请帮助...非常感谢

4

2 回答 2

1

这是正确的代码

在活动1

long remainingtime;

在 onCreate 下

 new CountDownTimer(20000, 1000) {

        public void onTick(long millisUntilFinished) {
            Counter.setText("Time left: " + millisUntilFinished / 1000);
                remainingtime=millisUntilFinished;
        }

        public void onFinish() {
        Counter.setText("done!");
    }}.start();  



public void onClick(View v) {

Intent i = new Intent(Activity1.this, Activity2.class);

   Bundle timetransfer=new Bundle();
    timetransfer.putLong("timer", remainingtime);
        i.putExtras(timetransfer);

活动2

Under onCreate



Bundle timetransfer = getIntent().getExtras();

                long time =timetransfer.getLong("timer");


        new CountDownTimer(time, 1000) {

            public void onTick(long time) {
                Counter2.setText("Time Left: " time / 1000);
            }

            public void onFinish() {
                Counter2.setText("Time is UP!");

                finish();    }

         }.start();

您必须删除这部分:

long_remaingtime=millisUntilFinished / 1000;

并把

long_remaingtime=millisUntilFinished;

因为在您的情况下,您已经将大约 20000(millisUntilFinished) 除以 1000,并且根据经过的时间,您得到大约 20 秒,然后您在下面放置了再次将该数字除以 1000 的代码。因此,在下一个活动中,您会自动收到时间已过的错误。

于 2014-08-30T02:45:54.483 回答
0

目前您正在传递"seconds remaining: "+...到下一个 Activity 并尝试将其解析为 Long 意味着您将进入NumberFormatException下一个 Activity 。使用额外的变量将CountDownTimer重命名时间传递给下一个活动:

public long long_remaingtime=20L;
 new CountDownTimer(20000, 1000) {
        public void onTick(long millisUntilFinished) {
            tv.setText("seconds remaining: " + millisUntilFinished / 1000);
            long_remaingtime=millisUntilFinished / 1000; //<<< 
        }
        public void onFinish() {
            tv.setText("done!");
            long_remaingtime=20L; //<< set default here
        }
     }.start();

    next.setOnClickListener(new OnClickListener(){
        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            Intent i = new Intent(MainActivity.this, Page2.class);
            i.putExtra("timervalue", long_remaingtime);
            startActivity(i);
        }

    });

并在下一个活动中获取计时器值:

Intent results = this.getIntent();
long value = results.getExtras().getLong("timervalue");
于 2013-02-05T20:45:52.820 回答