如何暂停布局图?

时间:2018-06-20 11:27:30

标签: android layout resume suspend

在.NET下,您可以调用SuspendLayout()/ ResumeLayout()。

Android下是否有等效功能?

我的原因是...我有一个RelativeLayout,其中包含多达64个“面板”(另一个具有3个TextView子级的RelativeLayout)。

通过串行通讯链接,我收到一条XML消息,描述要显示的面板数,面板的大小以及每个可见面板的3个文本视图中的放置位置。

初始代码都可以使用,我可以显示面板页面。

但是,当我收到一条新的XML消息时,我将隐藏所有面板,重新放置在新XML消息中定义的面板,更新每个面板的3个文本视图,然后显示正在使用的面板。

同样可以,但是当所有面板都隐藏后,页面将空白(可能要等待1-2秒),然后所有新面板出现。

我猜测隐藏/显示面板是一个相对较快的过程,但是在重新启用面板之前,要解码XML并更新面板文本/字体/颜色/等需要花费一些时间。

我想知道如何在更新顶层RelativeLayout时“暂停”绘图过程,然后在初始化所有视图后“恢复”绘图。

有没有办法做到这一点?

还是我从错误的角度看待整个事情? 如果是这样,什么是最好的尝试方法?

---更新---

好的,似乎我还为时过早,因为我在代码中发现一个“怪癖”,导致1-2秒的延迟(未处理的XML消息)。

但是感谢您抽出宝贵的时间给我一些指导。当我无聊的时候会读一些光!!

1 个答案:

答案 0 :(得分:0)

您应该做的第一件事是弄清楚可以委托给后台线程多少工作(例如,“解码XML”)。然后,您可以使用Looper.getMainLooper()安全地更新UI。

最好充气并填充新的布局,然后交换它们,而不是更新可见的布局。然后,您可以拥有一组回收的视图,即维护的视图数量是显示视图的两倍。这正是RecyclerView的重点(另请参见"Creating a List with RecyclerView")。

Live data也可能值得您研究。