2012-04-30 51 views
2

我有3个嵌套布局,我在访问其中的视图时遇到困难。下面的主要xml(A.xml)包含B的单个实例,其中包含多个C.xml。有在C.xml 3个图像访问Android中的嵌套布局

A.XML - >这是主要的XML

<include 
     android:id="@+id/b" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     layout="@layout/B" /> 

B.XML - >这是第2级

<include 
     android:id="@+id/c1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     layout="@layout/C" /> 

    <include 
     android:id="@+id/c2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     layout="@layout/C" /> 

    <include 
     android:id="@+id/c3" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     layout="@layout/C" /> 

C.xml - 这是3级

<ImageView 
     android:id="@+id/a1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/img1" /> 

    <ImageView 
     android:id="@+id/a2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/img2" /> 

    <ImageView 
     android:id="@+id/a3" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/img3" /> 

所以在这里,main包含B上的一个实例,它又包含了C的多个实例。所以如果我想从B访问c3和C3,我想让a2可见,我该怎么去关于它。

+0

你有这方面的一个实施在java代码?我认为这是不可能的,因为即使c的“包含”有一个id,你也无法抓住它们,因为它们不是视图(至少据我所知)。 – MikeIsrael

回答

3

您可以通过获取每个视图和子视图的引用来访问所有视图,如下例所示。

 View view = findViewById(R.id.b); 
     view = view.findViewById(R.id.c1); 
     ((TextView)view.findViewById(R.id.txt1)).setText("Got the First one"); 

     view = findViewById(R.id.b); 
     view = view.findViewById(R.id.c1); 
     ((TextView)view.findViewById(R.id.txt2)).setText("Got the Second one"); 

     view = findViewById(R.id.b); 
     view = view.findViewById(R.id.c2); 
     ((TextView)view.findViewById(R.id.txt1)).setText("Got the forth one"); 

同样,您也可以访问其他元素。

0

我有一个嵌套的布局结构类似于在问题中描述的,并没有遇到问题获取视图嵌套从我的主视图一个或两个级别。我把我的活动的是a.xml,然后找到我需要从我的活动的直接意见内容视图(而无需找到第二级的视图第三级视图),具体如下:

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.a); 
    ImageView a1 = (ImageView)findViewById(R.id.a1); 
}