【问题标题】:Adding multiple views of the same type添加多个相同类型的视图
【发布时间】:2011-07-16 10:13:18
【问题描述】:

所以,我制作了这个漂亮的小视图,它基本上显示了两个带有一些状态标签的按钮。没什么太复杂的。

<?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>

我想用以下代码将它添加到我的主要活动中:

LinearLayout root = (LinearLayout)findViewById(R.id.alarms);
View newView = View.inflate(this, R.layout.alarm, null);
alarms.add(newView);

但是,似乎我不能添加多个副本,我不确定为什么,或者如何解决这个问题以便能够添加多个副本。此外,我不知道如何访问各个部分,因为它们都有相同的 id。

谢谢, 蒂姆

【问题讨论】:

    标签: android layout views


    【解决方案1】:

    您如何尝试将多个副本添加到“根”LinearLayout?

    如果您只是尝试调用addView(newView) 两次,那么您就是在尝试两次添加相同的 View 对象引用。这是错误的,因为您尝试添加相同的 View 对象引用两次。我不完全确定执行此操作时定义的行为是什么,但我假设 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);
    

    【讨论】:

    • 你是对的。现在检查了。我一定是把它和别的东西弄混了。我的错。你是对的。现在删除我的答案。
    • 它是滚动视图,只有一个孩子。我的坏
    • 我没想到对实际孩子调用 findViewById()。回想起来似乎很明显。接受。
    【解决方案2】:

    每次要添加视图时都尝试为同一个视图充气。例如,如果您在每次按下按钮时添加一个视图,您将希望在 onClick() 之外声明该视图,但在 onCLick() 方法内分配该视图。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-29
      • 1970-01-01
      • 1970-01-01
      • 2020-07-18
      • 1970-01-01
      • 1970-01-01
      • 2016-10-27
      相关资源
      最近更新 更多