java 删除监听器_事件监听器在被删除后监听

我班上有很多事件监听器,早些时候我问过如何在这些监听器发生一次之后将其杀死,我解决了这个问题 .

它在某些情况下有效,但在其他情况下,我遇到了问题 . 例如,我有这个方法有一个事件监听器 .

private void startGame() {

HomePage.getCurrentGameID(new HomePage.CallbackID() {

@Override

public void onSuccess(final String currentGameID) {

games.addValueEventListener(new ValueEventListener() {

@Override

public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

if (dataSnapshot.child(currentGameID).getValue().equals(1)) {

getResults();

Log.i("FlipCoin", "``startGame() happened");

} else {

return;

}

games.removeEventListener(this);

}

}

我有那个开始游戏的方法,在 onDataChange() 结束时我有 games.removeEventListener(this) . 但有时,即使在执行此操作之后,它仍会运行代码并且我知道这一点,因为每次方法发生时它都会记录到LogCat .

我的代码中只有一个实例,我调用 startGame() ,该实例位于此计时器中

private void runCounter() {

final Runnable counter = new Runnable() {

@Override

public void run() {

Log.i("FlipCoin", "``runCounter() happened");

startGame();

}

}

};

counter.run();

}

我摆脱了许多不必要的代码,所以这些方法可能没有很多实际意义,但它们被用作我问题的例子 .

无论如何,正如你在runCounter()方法中看到的那样,它调用 startGame() 就像它应该的那样,我也有一个方法中的日志,让我知道何时调用这个 runCoutner() 方法 .

奇怪的是 runCounter() 方法只在logcat中记录了一次,但是它保持记录 startGame() ,即使我只在我的代码中调用它一次,并且我在方法结束时删除了监听器 .

为什么会这样,我非常困惑!

Runnable我正在使用(与问题无关)

private void runCounter() {

final TextView headsOrTails = findViewById(R.id.HeadsOrTails);

final Handler handler = new Handler();

final AtomicInteger n = new AtomicInteger(3);

final Runnable counter = new Runnable() {

@Override

public void run() {

headsOrTails.setText("Flipping in: " + Integer.toString(n.get()) + " seconds");

if (n.getAndDecrement() >= 1)

handler.postDelayed(this, 1000);

else {

headsOrTails.setText("Flipping");

Log.i("FlipCoin", "``runCounter() happened");

startGame();

}

}

};

counter.run();

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值