在单一布局中多次重复使用布局时,像另一个视图一样访问视图

时间:2013-09-04 09:29:05

标签: android android-layout

我正在开发一个应用程序,其中我在另一个布局中多次重复使用子布局 在我的孩子布局中,只有一个按钮 我的问题是...... 如何以不同的方式访问子布局视图。

例如我在Parent布局中访问子布局3次。 然后它在运行时显示父布局中的3个按钮。 我想从这些按钮调用不同的活动。

 My child layout


<RelativeLayout
    android:id="@+id/mylayout"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_margin="30dp"
    android:orientation="horizontal" >

    <Button
        android:id="@+id/bt1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:src="@drawable/chemistry" />

</RelativeLayout>

My Parent Layout
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/login_bg" >

<HorizontalScrollView
    android:id="@+id/horizontalScrollView1"
    android:layout_width="fill_parent"
    android:layout_height="470dp"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
          android:id="@+id/lol"
        android:orientation="horizontal" >



    </LinearLayout>
</HorizontalScrollView>

  Java Code-- 
LinearLayout rl= (LinearLayout)findViewById(R.id.lol);
    LayoutInflater inflater = (LayoutInflater)           this.getSystemService(LAYOUT_INFLATER_SERVICE);

    ArrayList<String> as= getIntent().getExtras().getStringArrayList("dis");
    Object[] mstring= as.toArray();
int x=  mstring.length;
for (int i=0;i<x; i++ ){

    View childLayout = inflater.inflate(R.layout.despage,
            (ViewGroup) findViewById(R.layout.despage));
               rl.addView(childLayout);

2 个答案:

答案 0 :(得分:2)

您可以为每个包含添加ID

<include android:id=”@+id/child1”
         android:layout_width=”match_parent”
         android:layout_height=”match_parent”
         layout=”@layout/child”/>
<include android:id=”@+id/child2”
         android:layout_width=”match_parent”
         android:layout_height=”match_parent”
         layout=”@layout/child”/>
<include android:id=”@+id/child3”
         android:layout_width=”match_parent”
         android:layout_height=”match_parent”
         layout=”@layout/child”/>

然后,您可以从活动中检索每个孩子及其内容:

View child1 = findViewById(R.id.child1);
Button button1 = child1.findViewById(R.id.someButtonInsideChildLayout);
View child2 = findViewById(R.id.child2);
Button button2 = child2.findViewById(R.id.someButtonInsideChildLayout);
..

您可以使用样式以更好的方式解决您的问题(例如,应用于主布局内3个按钮的values / styles.xml中的一个样式)。

编辑(在问题附后的代码之后) 您可以使用

访问for循环内的每个按钮
Button button = childLayout.findViewById(R.id.bt1);

答案 1 :(得分:0)

我认为这就是你想要做的事情:

parent.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<Button
    android:id="@+id/btn1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    layout="@layout/child" 
    android:text="Button 1">
</Button>

<Button
    android:id="@+id/btn2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    layout="@layout/child" 
    android:text="Button 2"
    >
</Button>

<Button
    android:id="@+id/btn3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    layout="@layout/child"
    android:text="Button 3" >
</Button>

</LinearLayout>

child.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

</LinearLayout>

findViewById(R.id.btn1).setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
Toast.makeText(MainActivity.this, "Clicked on button 1",Toast.LENGTH_SHORT).show();
    }
});


findViewById(R.id.btn2).setOnClickListener(new OnClickListener() {

    @Override
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, "Clicked on    button2",Toast.LENGTH_SHORT).show();
    }
});