我正在构建一个递归分层布局。这是我的 message_with_replies.xml (我删除了对齐属性和一些项目以使想法清晰):
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<Button
android:id="@+id/toggleReplies"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/button_expand_replies" />
<LinearLayout
android:id="@+id/replies"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical" >
</LinearLayout>
</RelativeLayout>
在 Java 代码中,我使用此布局对项目进行膨胀并将它们嵌入到父级的回复布局中,然后对子级重复此操作,因此它们形成一棵树:
root item
- child 0 of root
- - child 0 of child 0 of root
- - child 1 of child 0 of root
- - - child 0 of child 1 of child 0 of root
- child 1 of root
- child 2 of root
- child 3 of root
- - child 0 of child 3 of root
当我在顶层或离顶层大约 2-3 层时,一切看起来和执行都很好,但随着我走得更深,布局的响应越来越慢。减速是非线性的,在大约 7 或 8 的深度上,UI 完全卡住了(模拟器在思考了大约半分钟后引发了异常)。
显然,问题在于嵌入式布局。我将线性布局嵌入到相对布局中,因此我的层次结构的每个新级别都意味着在 UI 布局方面有两个额外的嵌入。
如何优化这个?
我可以尝试摆脱线性布局,但我希望这不会解决问题,只会将其推迟到更深层次,因为我仍然会有嵌入。
当我用其他布局膨胀子项目时,通常可以保持层次结构平坦吗?我可以给物品充气,然后在没有容器的情况下取出物品吗?
补充:我已经绕过了这个问题。现在我使用边距构建树,因此不会嵌入布局,并且 UI 不会卡住。一切看起来和工作正常。
但是,原始问题尚未得到解答。