0

更新:在 Android 中,看起来(如果我错了),视图必须只有一个父级才能显示。这与许多其他 UI 系统的不同之处在于不允许共享视图。有人可以确认是否是这种情况吗?

我有一个广告视图(是的,我也不喜欢广告),它需要出现在两个单独的列表视图中。两个列表视图如何包含这种常见的广告视图?(广告视图由活动维护,而不是由列表适配器维护)。当我添加到一个时,它会从另一个中删除,因为如果我添加它,它会说它只能有一个父级。所以我删除了恰好是另一个列表视图中的持有者的父级。因此,广告最终一次只出现在一个列表中。但更一般地说,两个单独的视图如何各自包含另一个共同的视图?

如果我有两个视图 v1 和 v2 并且有第三个视图 v3 是一个包含图像和文本的 FrameLayout,则只是为了简化。我应该如何从 v1 和 v2 中引用这个 v3。我只是在 v1 和 v3 中包含 v3 吗?它是我想同时指出的 V3 的一个特定实例?

这是我要分享 my_ad.xml 的广告(请注意它是由 MainActivity 而不是 ListAdapters 创建/膨胀/更新的):

<FrameLayout     android:id="@+id/myAd">
   <ImageView></ImageView>
</FrameLayout>

这是我的 list_view_1_row

<RelativeLayout>
 ......
 <LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:id="@+id/myAdHolder" />
     <include
    android:id="@+id/myAdInclude"
    layout="@layout/my_ad" />
 </LinearLayout>
<RelativeLayout>

这是 list_view_2_row

<RelativeLayout>
 ......  .... 
 ......
 <LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:id="@+id/myAdHolder" />
     <include
    android:id="@+id/myAdInclude"
    layout="@layout/my_ad" />
 </LinearLayout>
<RelativeLayout>

所以现在假设我膨胀了 my_ad.xml 并在我的 MainActivity 中保留了对它的引用

   private FrameLayout myAdd;

   onCreate()
      myAd = (FrameLayout)inflater.inflate(my_ad.xml)

现在我需要知道的是我现在如何在两个列表视图的元素中共享这个视图实例(由活动膨胀并且其内容由活动管理)?如何在列表视图的适配器中设置它。如果我添加它,我会遇到关于 View 不能有多个父级的问题。当我试图在行项目中获取对视图的引用时。如何将适配器中的 ViewHolder 值设置为此公共视图实例?

我在我的活动中管理广告,而不是在 ListAdapters 中,所以我想在两个单独的列表中共享活动托管视图,每个列表都有自己的适配器。

顺便说一句,除了添加 adView 之外,我尝试的另一件事是尝试在适配器中获取对 myAdInclude 的引用,但这返回为 null。我仍然需要以某种方式真正设置值......

当视图内容的创建/更新在逻辑上不属于任一列表视图时,我还想就如何维护由两个或多个列表视图/适配器共享的视图提出评论/意见?更新包含的视图时,列表视图会自动更新吗?

4

1 回答 1

0

Views are not generally sharable in Android because in order to be displayed they must have exactly one parent view at a time.

于 2012-08-23T02:04:23.873 回答