【发布时间】:2020-01-17 03:06:15
【问题描述】:
我有一个抽象父类,带有一些抽象方法。现在我有这个超级班的4个孩子。我正在观察超类中的实时数据,如下所示:
viewModel.getSignedS3LiveData().observe(this, commonResponse -> {
if(commonResponse != null)
{
handleSignedS3Response(commonResponse); //abstract method
}
});
其中 handleSignedS3Response 是一个抽象方法。
场景是我有 4 个片段扩展了这个超类,并一个接一个地添加到 backstack(所以 4 个步骤)。
当添加第 1 步时,将调用 handleSignedS3Response 的正确实现方法,该方法位于片段 1 中。
当我从片段 1 移动到片段 2 时,handleSignedS3Response 在片段 1 中被调用,而不是在片段 2 中。
这仅发生在我在 livedata 回调中调用的方法上。即使对于不在 livedata 回调中的 fragment2,还有其他抽象被正确调用。
请帮我解决这个问题。如果有什么我无法解释清楚的,请询问。
【问题讨论】:
-
所有
registered observers of the livedata will be called,在您的情况下,该方法将从片段 1 和片段 2 中调用 两次。您应该杀死片段 1 或从片段 1 中删除观察者,而片段事务以避免方法被调用两次! -
如果是这种情况,我会在两种实现方法中都收到调用。即使发生这种情况,我也会处理的。
-
不能调用
abstract方法,只能调用它们的实现。