Android布局占位符,用于动态添加视图

Ral*_*alf 22 android android-layout

在我的Android Activity中,我需要在布局中的特定位置动态地(在运行时)添加单个View.要添加的视图在运行时确定.例如,布局可能看起来像这样:

<LinearLayout ...>
    <TextView ... />
    <!-- Dynamic item to be added here -->
    <TextView ... />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

实现这一目标的最佳方法是什么?

一种解决方案是使用layout.addView(view, index),但我不想硬编码索引.

另一种解决方案是使用FrameLayout作为占位符,并在FrameLayout内放置动态视图,例如:

<LinearLayout ...>
    <TextView ... />
    <FrameLayout android:id="@+id/placeholder" />
    <TextView ... />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

然后:

findViewById(R.id.placeholder).addView(view);
Run Code Online (Sandbox Code Playgroud)

但是,这会在层次结构中添加不必要的视图.

建议的方法是什么?

Séb*_*ien 13

我认为使用FrameLayout作为视图的占位符"在运行时添加"是一个很好的解决方案.

我不担心额外的"不必要"观点对绩效的影响.


Dr1*_*1Ku 8

您还可以使用a来实现这种"懒惰包含"行为ViewStub,如Android开发者的这篇(相当旧的)文章所述.

  • 对于“延迟包含”,您需要在编译时指定要包含的布局文件,但我需要能够添加多个视图之一(在运行时确定)。我编辑了问题以澄清。 (2认同)
  • ViewStub 存根 = (ViewStub) findViewById(R.id.container_stub); stub.setLayoutResource(R.layout.activity_home); (2认同)