gpt4 book ai didi

Android Activity 在旋转时刷新

转载 作者:太空宇宙 更新时间:2023-11-03 13:20:34 30 4
gpt4 key购买 nike

我是一位经验丰富的 .NET 开发人员,但这是我的第一个 Android 应用程序,它让我抓狂!

这是一个倒数计时器,工作正常,但当您旋转屏幕时,它会重新初始化 Activity ,从而使倒计时归零并停止。

这是我试过的;我摆脱了 CountDownTimer 对象,而是创建了一个扩展 AsyncTask 的 Activity 内部类,因此它在单独的线程上运行......没有变化。我想作为一个内部类,它正在随着 Activity 重新初始化。

这是我接下来尝试的;我把类(class)设为外部类(class)。 Activity 将其 Context 传递给类,并且 onProgressUpdate 和 onPostExecute 在上下文上运行公共(public)函数以更新 Activity 的 UI。同样,这在您旋转它之前工作正常......Aaaargh!

但是,我发现异步类仍在运行,但 UI 没有改变,因为(我认为) Activity 现在具有与异步类引用的上下文不同的上下文。

这就是我所在的地方。每个解决方案解决一个问题并创建另一个问题。我是否需要以某种方式维护上下文,或者我是否开始追逐自己的尾部?

任何帮助将不胜感激!

他。巴里

最佳答案

在您的CountDownTimer 中实现onTick:

@Override
public void onTick(long millisUntilFinished) {
// something like this:
this.millisUntilFinished = millisUntilFinished;
}

在您的Activity 中实现onSaveInstanceState:

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
// something like this:
savedInstanceState.putLong("millisUntilFinished", millisUntilFinished);
}

还在 onCreateonStart 中重新设置您的 CountDownTimer:

@Override
public void onCreate(Bundle savedInstanceState) {
// ...

if (savedInstanceState != null) {
millisUntilFinished = savedInstanceState.getLong("millisUntilFinished");
}

}

@Override
public void onStart() {
super.onStart();
timer = new MyCountDownTimer(millisUntilFinished, 100);
timer.start();
}

不要逐字复制此代码,缺少一些细节/所做的假设在您的代码中会有所不同,但它可能看起来像这样。

关于Android Activity 在旋转时刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28730897/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com