我有一个CountDownTimer实例,该实例在recyclerView适配器类中初始化。倒数到零后,我创建一个alertDialog。我想停止/禁用计时器,如果我按下“后退”按钮并保留绑定适配器的片段所在的活动。
不幸的是,我无法检查适配器中的当前活动,如果我退出而没有取消计时器,则随着上下文的更改,我的应用程序将崩溃。
离开活动后如何立即取消呢?
答案 0 :(得分:1)
重写onBackPressed()
并在Timer上调用cancel()
方法。这样...
@Override
public void onBackPressed() {
mTimer.cancel() // Call cancel on timer instance
}
此外,如果您想在看不到活动时停止计时器,则可以在活动/片段的onPause()
中调用cancel方法。
答案 1 :(得分:0)
计时器到期后,请检查Activity
是否仍在运行此代码段:
if ( context instanceof Activity ) {
Activity activity = (Activity)context;
if ( activity.isFinishing() ) {
return;
}
}
显然,如果context
已死,请不要使用Activity
。
答案 2 :(得分:0)
这里有很多选择,其中一个是recyclerView.Adapter类中的onDetachedFromRecyclerView()
方法
重写此方法,并通知ViewHolder停止countDownTimer,以通知视图所有者您可以让他们监听诸如stopTimer()
之类的事件,并且可以调用此方法来停止计时器!在您要为recyclerView设置适配器的活动中,重写onPause或onStop方法并添加此代码recyclerView.setAdapter(null);
,这将触发onDetachedFromRecyclerView()
方法,并使countDownTimer停止,您也可以检查view.getContext()==null
在您的countDownTimer中,如果上下文为null,则意味着上下文已更改