两个ListView如何在列表元素中共享一个公共视图?

时间:2012-08-22 05:15:38

标签: android android-layout

更新:在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)

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

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

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

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

1 个答案:

答案 0 :(得分:0)

Android中的视图通常不可共享,因为为了显示它们,它们必须一次只有一个父视图。