Добавление нескольких видов одного типа - PullRequest
3 голосов
/ 16 июля 2011

Итак, у меня есть этот прекрасный маленький вид, который я сделал, который в основном показывает две кнопки с некоторыми метками состояния.Ничего слишком сложного.

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

Однако, похоже, я не могу добавить больше, чемодин из них, и я не уверен, почему или как обойти эту проблему, чтобы иметь возможность добавить несколько копий.Кроме того, я не знаю, как получить доступ к отдельным частям, поскольку все они имеют одинаковый идентификатор.

Спасибо, Тим

Ответы [ 2 ]

6 голосов
/ 16 июля 2011

Как вы пытаетесь добавить несколько копий в «корневую» 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() для фактических дочерних представлений, в отличие от родительского:

newView0.findViewById( someID )

Update : Только что проверил код в 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);
0 голосов
/ 18 июля 2015

Старайтесь раздувать один и тот же вид каждый раз, когда хотите добавить вид.Например, если вы добавляете представление при каждом нажатии кнопки, вам нужно объявить представление вне onClick (), но назначить представление внутри метода onCLick ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...