2

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

例如,我在父布局中访问子布局 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);
4

2 回答 2

3

您可以像这样为每个包含添加一个 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”/>

然后从 Activity 你可以检索每个孩子及其内容:

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);
..

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

编辑(在附加到问题的代码之后)您可以访问 for 循环中的每个按钮

Button button = childLayout.findViewById(R.id.bt1);
于 2013-09-04T09:54:15.367 回答
0

我认为这是你想要做的:

父.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>

孩子.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();
    }
});
于 2013-09-04T10:29:10.590 回答