返回到具有自定义视图的活动时,Invalidate无法调用onDraw

时间:2017-01-20 11:38:46

标签: android ondraw custom-view android-view-invalidate

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

我有一个主要活动,从中调用其他活动(我将从现在开始将这些活动称为子活动)。只要其中一个完成,它就会调用finish并将数据返回到主活动。

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

由于'状态'数据永远不会改变,因此它保存在一个单例中,视图从单例中获取数据以定义它绘制的内容。这没有任何问题,即数据始终如我所料。

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

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

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

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

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

setWillNotDraw(false);

每当数据发生变化时,都会调用以下方法:

invalidate();
requestLayout();

现在,还有一件事......当在那个直接点返回活动时,我刷新并且这个DOES正确绘制,即invalidate会触发onDraw调用...任何后续网络更改(传播)都会失败导致onDraw调用。

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

我希望我能为某人提供足够的信息来帮助我......

1 个答案:

答案 0 :(得分:1)

嗯,最后我的答案与这个问题关系不大,我想这是一个如何通过回到绝对基础并检查明显问题来解决问题的一个例子。

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

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

尽管如此,虽然这篇文章没有提供可以帮助他人的解决方案,但也许它确实说...退一步并先检查一下这个问题!

相关问题