我正在开发一个应用程序,其中我在另一个布局中多次重复使用子布局 在我的孩子布局中,只有一个按钮 我的问题是...... 如何以不同的方式访问子布局视图。
例如我在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);
答案 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();
}
});