我正在使用处理程序在 RecyclerView
列表项中显示计时器。当我按回时,承载 RecyclerView 的 Activity 被完全销毁,Handler() 仍在后台运行。该处理程序在 ViewHolder
中创建并启动。有什么方法可以从 ViewHolder
本身中删除处理程序的回调吗?
我的ViewHolder示例代码
class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), CustomRunnable.CustomRunnableListener{
private val handler = Handler()
lateinit var customRunnable: CustomRunnable //custom runnable for my timer logic
fun bind(position: Int, listModelClass: ModelClass?){
if(someCondition){
customRunnable = CustomRunnable(handler, this, textView, listModelClass)
handler.postDelayed(customRunnable, 1000)
}
}
override fun onTimerFinish(listModelClass: ModelClass) {
// I get this call back when the timer finishes
handler.removeCallbacks(customRunnable)
}
}
最佳答案
据我所知,当 RecyclerView 与 Activity 分离时,适配器上没有调用任何方法。
尝试在 BaseActivity
或 Application
类中创建一个计时器对象或对象列表,并在按 onBack 后运行一个将停止该计时器的方法。
//Declare timer
CountDownTimer cTimer = null;
//start timer function
void startTimer() {
cTimer = new CountDownTimer(30000, 1000) {
public void onTick(long millisUntilFinished) {
}
public void onFinish() {
}
};
cTimer.start();
}
//cancel timer
void cancelTimer() {
if(cTimer!=null)
cTimer.cancel();
}
关于java - 在 Recycler Adapter 中获取 Activity onDestroy(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58389530/