首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android传递2个或更多活动的倒计时计时器的值

Android传递2个或更多活动的倒计时计时器的值
EN

Stack Overflow用户
提问于 2013-02-06 04:38:22
回答 2查看 3.6K关注 0票数 1

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

代码语言:javascript
复制
    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中的代码

代码语言:javascript
复制
    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来使activity 2像这样

代码语言:javascript
复制
    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的初学者,所以请任何帮助…谢谢阿洛特

EN

回答 2

Stack Overflow用户

发布于 2014-08-30 10:45:54

这是正确的代码

在Activity1中

代码语言:javascript
复制
long remainingtime;

在onCreate下

代码语言:javascript
复制
 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);

Activity2

代码语言:javascript
复制
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();

您必须擦除此部分:

代码语言:javascript
复制
long_remaingtime=millisUntilFinished / 1000;

把它放在

代码语言:javascript
复制
long_remaingtime=millisUntilFinished;

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

票数 1
EN

Stack Overflow用户

发布于 2013-02-06 04:45:53

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

代码语言:javascript
复制
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);
        }

    });

在下一个活动中,获取timervalue如下:

代码语言:javascript
复制
Intent results = this.getIntent();
long value = results.getExtras().getLong("timervalue");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14716468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档