在我的Android Activity中,我需要在布局中的特定位置动态地(在运行时)添加单个View . 要添加的视图在运行时确定 . 例如,布局可能看起来像这样:
<LinearLayout ...>
<TextView ... />
<!-- Dynamic item to be added here -->
<TextView ... />
</LinearLayout>
实现这一目标的最佳方法是什么?
一种解决方案是使用 layout.addView(view, index)
,但我不想硬编码索引 .
另一种解决方案是使用FrameLayout作为占位符,并在FrameLayout内放置动态视图,例如:
<LinearLayout ...>
<TextView ... />
<FrameLayout android:id="@+id/placeholder" />
<TextView ... />
</LinearLayout>
然后:
findViewById(R.id.placeholder).addView(view);
但是,这会在层次结构中添加不必要的视图 .
建议的方法是什么?
3 回答
我认为使用FrameLayout作为视图的占位符“在运行时添加”是一个很好的解决方案 .
我不担心额外的“不必要”观点对绩效的影响 .
您还可以使用
ViewStub
来实现此"lazy include"行为,如Android开发者中此(相当旧)article所述 .您可以使用addView(View child,int index)而无需对确切索引进行硬编码 .
如果可以修复其中一个视图的邻居(例如,在要插入项目的位置之前有一个特定标签),则可以获取该视图的索引,然后插入动态视图:
或者您可以使用ViewStub,但只需将其删除即可:
这样您就不会得到巨大的视图层次结构 .