2

我继承了一些代码,因此我没有真正的自由来更改它。:(

我有一个主要活动,从中调用其他活动(从现在起我将这些活动称为子活动)。每当其中一个完成时,它就会调用完成并将数据返回给主活动。

每个活动(包括主要活动)的顶部都有一个显示自定义视图的栏。自定义视图包含一个画布,该画布具有依赖于网络状态的绘图.. 即 wifi/移动等...

由于“状态”数据永远不会改变,它保存在单例中,视图从单例中获取数据以定义它绘制的内容。这是没有问题的,即数据总是如我所料。

当我第一次启动 MainActivity 时,随着网络的变化,数据会发生变化,并且每次调用“无效”视图都会收到对“onDraw”的系统调用,正如我所期望的那样。

在每个子活动中也是如此。

在完成子活动并返回到 mainActivity 后,对 invalidate 的调用不再导致对 onDraw 的调用发生。

我已经看了很长时间了,只是无法弄清楚出了什么问题。

在我的构造函数中,我有:

setWillNotDraw(false);

每当数据更改时,都会调用以下方法:

invalidate();
requestLayout();

现在,还有一件事……在立即返回活动时,我刷新并且这确实绘制正确,即无效确实触发了 onDraw 调用……任何后续网络更改(被传播)都无法导致onDraw 调用。

我想知道这是否与视图以某种方式分离有关。我可以看到调用了“onDetachedFromWindow”,但是触发是子活动的破坏,因此我不明白为什么这会影响 MainActivity,但这是我唯一能想到的。

我希望我已经提供了足够的信息来帮助我的人......

4

1 回答 1

1

好吧,最后我的回答与这个问题几乎没有关系,我想这是一个如何通过回到绝对基础并检查显而易见的问题来解决问题的例子。

我的活动都继承自抽象活动。在该活动中有一个视图实例。我遇到麻烦的视图是使用该声明而不是拥有自己的实例,因此一项活动的行为随后会无意中影响另一项活动。

所以,如果我能够发布所有代码,我相信其他人会发现这一点,但不幸的是,在这种情况下我不能。

尽管如此,虽然这篇文章没有提供可以帮助其他人的解决方案,但也许它确实说......退后一步,先检查一下显而易见的事情!

于 2017-01-20T15:10:40.957 回答