首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Chronometer空对象引用

Chronometer空对象引用
EN

Stack Overflow用户
提问于 2019-11-05 20:43:49
回答 3查看 110关注 0票数 0

我在第二个活动中有一个计时器。我想从main activity访问它,所以我在第二个activity中将时钟设置为public static,在main activity中设置为"secondActivity.chronometer“,但当启动应用程序时,它显示chronometer.setbase(long) on a null object reference,我检查了xml是否正确。有人知道如何解决这个问题吗?

EN

回答 3

Stack Overflow用户

发布于 2019-11-05 20:51:16

您尚未初始化计时器。当你启动应用程序时,计时器没有任何价值,因为它处于第二个活动中。

票数 0
EN

Stack Overflow用户

发布于 2019-11-05 20:56:28

启动应用程序时,第二个活动未初始化。作为TextView的子类的chronometer也无法初始化。在其他活动中访问或更改视图不是一个好主意。您可以传输数据并按数据显示。

票数 0
EN

Stack Overflow用户

发布于 2019-11-05 21:07:09

正如我在评论中提到的,保留对View的静态引用是一个非常糟糕的主意。首先,正如其他答案所表明的那样,不能保证您的View在您调用它时已经初始化,因为它所在的Activity可能还没有初始化。然而,它也是内存泄漏的主要原因(参见this answer for more detail)。

我的建议是,与其启动Chronometer,不如记下您希望它启动的时间(对于Chronometer,可以通过调用SystemClock#uptimeMillis获得),将其写入Intent,并使用它来启动您的第二个Activity。然后,您可以使用此时间作为您的Chronometer的基准时间,因此给人的印象是它一直在运行整个时间。也就是说。

代码语言:javascript
复制
public class ActivityOne extends Activity {
    //...
    private void startChronometer() {
        final Intent i = new Intent(this, ActivityTwo.class);
        i.putExtra("time", SystemClock.uptimeMillis());
        startActivity(i);
    }
}
代码语言:javascript
复制
public class ActivityTwo extends Activity {

    private Chronometer chrono;  

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        //...
        chrono = findViewById(R.id.id_of_chronometer);
        chrono.setBase(getIntent().getLongExtra("time", SystemClock.uptimeMillis()));
        chrono.start();
    }

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58711636

复制
相关文章

相似问题

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