Android 添加相同类型的多个视图

Android 添加相同类型的多个视图,android,layout,views,Android,Layout,Views,我有一个很好的小视图,它基本上显示了两个按钮和一些状态标签。没什么太复杂的 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="cen

我有一个很好的小视图,它基本上显示了两个按钮和一些状态标签。没什么太复杂的

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

<LinearLayout android:orientation="horizontal"
    android:layout_width="wrap_content" android:layout_height="wrap_content">
    <ToggleButton android:text="ToggleButton" android:id="@+id/toggleButton1"
        android:layout_width="wrap_content" android:layout_height="wrap_content"
        android:background="@drawable/on_off">
    </ToggleButton>

    <TextView android:text="TextView" android:id="@+id/textView1"
        android:layout_height="wrap_content" android:layout_width="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:layout_marginLeft="20px" android:layout_marginRight="20px"
        android:layout_marginTop="3dp" android:layout_marginBottom="3dp">
    </TextView>
    <ImageButton android:src="@drawable/preferences"
        android:layout_height="wrap_content" android:layout_width="wrap_content"
        android:id="@+id/imageButton2" android:background="@android:color/transparent">
    </ImageButton>
</LinearLayout>

<LinearLayout android:layout_width="wrap_content"
    android:layout_height="wrap_content">
    <TextView android:id="@+id/view_monday" android:textSize="10dp" android:layout_marginRight="3dp"
        android:layout_height="wrap_content" android:layout_width="wrap_content" android:textColor="#2F4F4F"
        android:text="@string/monday_short"></TextView>
    <TextView android:id="@+id/view_tuesday" android:textSize="10dp" android:layout_marginRight="3dp"
        android:layout_height="wrap_content" android:layout_width="wrap_content" android:textColor="#2F4F4F"
        android:text="@string/tuesday_short"></TextView>
    <TextView android:id="@+id/view_wednesday" android:textSize="10dp" android:layout_marginRight="3dp"
        android:layout_height="wrap_content" android:layout_width="wrap_content" android:textColor="#2F4F4F"
        android:text="@string/wednesday_short"></TextView>
    <TextView android:id="@+id/view_thursday" android:textSize="10dp" android:layout_marginRight="3dp"
        android:layout_height="wrap_content" android:layout_width="wrap_content" android:textColor="#2F4F4F"
        android:text="@string/thursday_short"></TextView>
    <TextView android:id="@+id/view_friday" android:textSize="10dp" android:layout_marginRight="3dp"
        android:layout_height="wrap_content" android:layout_width="wrap_content" android:textColor="#2F4F4F"
        android:text="@string/friday_short"></TextView>
    <TextView android:id="@+id/view_saturday" android:textSize="10dp" android:layout_marginRight="3dp"
        android:layout_height="wrap_content" android:layout_width="wrap_content" android:textColor="#2F4F4F"
        android:text="@string/saturday_short"></TextView>
    <TextView android:id="@+id/view_sunday" android:textSize="10dp" android:layout_marginRight="3dp"
        android:layout_height="wrap_content" android:layout_width="wrap_content" android:textColor="#2F4F4F"
        android:text="@string/sunday_short"></TextView>
</LinearLayout>
</LinearLayout>
然而,似乎我不能添加多个副本,我不知道为什么,或者如何绕过这个问题来添加多个副本。此外,我不知道如何访问单个部件,因为它们都具有相同的id

谢谢,
Tim

您如何尝试将多个副本添加到“根”线性布局

如果您只是尝试调用两次
addView(newView)
,那么您将尝试两次添加相同的视图对象引用。这是错误的,因为您尝试添加同一视图对象引用两次。我不完全确定执行此操作时定义的行为是什么,但我假设addView()第二次不执行任何操作,因为它检查它是否已包含对
newView
的引用(如果有人能够确认这是否正确,我将不胜感激)

因此,我认为您需要膨胀两个单独的子视图实例,例如:

View newView0 = View.inflate(this, R.layout.alarm, null);
View newView1 = View.inflate(this, R.layout.alarm, null);
然后分别添加它们

我认为您可以通过在实际的子视图(而不是父视图)上调用
findViewById()
来绕过重复ID的问题:

newView0.findViewById( someID )
更新:刚刚在Eclipse中为您测试了代码。我将从XML文件创建的两个子视图添加到LinearLayout,然后在第二个子视图中更改其中一个视图的属性(背景颜色为蓝色):

    LinearLayout root = new LinearLayout(this);
    LinearLayout newView0 = (LinearLayout)View.inflate(this, R.layout.main, null);
    LinearLayout newView1 = (LinearLayout)View.inflate(this, R.layout.main, null);
    root.addView(newView0);
    root.addView(newView1);
    setContentView(root);
    newView1.findViewById(R.id.view_monday).setBackgroundColor(0xff0000ff);

每次要添加视图时,尝试对同一视图进行充气。例如,如果每次按下按钮时都要添加视图,则需要在onClick()之外声明视图,但在onClick()方法内部指定视图

你说得对。现在检查一下。我一定是把它和别的东西弄混了。我的错误。你说得对。正在删除我的答案。滚动视图只包含一个子项。我的孩子我没有想到对实际的孩子调用findviewbyd()。回想起来似乎很明显。认可的。
    LinearLayout root = new LinearLayout(this);
    LinearLayout newView0 = (LinearLayout)View.inflate(this, R.layout.main, null);
    LinearLayout newView1 = (LinearLayout)View.inflate(this, R.layout.main, null);
    root.addView(newView0);
    root.addView(newView1);
    setContentView(root);
    newView1.findViewById(R.id.view_monday).setBackgroundColor(0xff0000ff);