Android использование макетов в качестве шаблона для создания нескольких экземпляров макета

хорошо, поэтому я понимаю, как использовать тег include, но я столкнулся с проблемой.

в основном я хочу иметь макет, определенный в xml, который имеет пару TextViewи ImageView в нем. Затем я хочу перебирать массив и заполнять поля в макете xml в зависимости от того, что в массиве(который заполняется во время выполнения). Таким образом, создание нескольких копий XML-макета и заполнение полей уникальными данными. Теперь я понятия не имею, как вы можете повторно использовать это LinearLayout таким образом, как TextViews и ImageViewв нем есть постоянный ID и мне нужно сделать несколько копий этого макета.

есть ли способ раздуть ресурс, а затем сделать его копию, которая будет работать... Так что

LinearLayout one = new LinearLayout(inflater.inflate(R.layout.home, container, false));

^ к сожалению, такого конструктора нет.

единственный другой способ - сделать все это программно, но я бы предпочел иметь свойства представлений и LinearLayout в XML, а не в коде. Это как я хотите, чтобы LinearLayout быть шаблон, который вы можете сделать копии, я думаю... Не уверен, что это возможно.

2 ответов


вы можете легко сделать это,вам просто нужно сломать его. Сначала вы загружаете макет, в который хотите вставить динамические представления. Затем вы раздуваете свое подвидение и заполняете его столько раз, сколько вам нужно. Затем добавить вид в компоновку родителя, и, наконец, установить вид содержание деятельности родительского вида.

вот пример:

    LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    LinearLayout parent = (LinearLayout) inflater.inflate(R.layout.main,
            null);

    for (int i = 0; i < 3; i++) {
        View custom = inflater.inflate(R.layout.custom, null);
        TextView tv = (TextView) custom.findViewById(R.id.text);
        tv.setText("Custom View " + i);
        parent.addView(custom);
    }

    setContentView(parent);

здесь главный.xml-файл, который я вставляю в:

<?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:orientation="vertical" >

</LinearLayout>

а вот обычай.XML посмотреть, что я надуваю, заполняю и динамически вставляю:

<?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="wrap_content"
    android:orientation="horizontal" >

    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="horizontal" >

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_launcher" />

        <TextView
            android:id="@+id/text"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" />
    </LinearLayout>

</LinearLayout>

надеюсь, этот пример поможет!


чтобы annyone все еще искал подобное решение, по-видимому, вы также можете использовать include непосредственно в xml и по-прежнему иметь возможность ссылаться на них в коде:

LinearLayout row1 = (LinearLayout) findViewById(R.id.row1)
TextView text1 = row1.findViewById(R.id.text);

LinearLayout row2 = (LinearLayout) findViewById(R.id.row2)
TextView text2 = row2.findViewById(R.id.text);

источник: Ромен Парень