gpt4 book ai didi

android - 返回到具有自定义 View 的 Activity 时,Invalidate 无法调用 onDraw

转载 作者:行者123 更新时间:2023-11-29 01:12:49 24 4
gpt4 key购买 nike

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

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

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

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

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

在每个子 Activity 中同样如此。

完成子 Activity 并返回主 Activity 后,对无效的调用不再导致对 onDraw 的调用发生。

我已经看了很长时间了,只是想不通哪里出了问题。

在我的构造函数中我有:

setWillNotDraw(false);

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

invalidate();
requestLayout();

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

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

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

最佳答案

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

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

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

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

关于android - 返回到具有自定义 View 的 Activity 时,Invalidate 无法调用 onDraw,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41762798/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com