Android использование макетов в качестве шаблона для создания нескольких экземпляров макета
хорошо, поэтому я понимаю, как использовать тег include, но я столкнулся с проблемой.
в основном я хочу иметь макет, определенный в xml, который имеет пару TextView
и ImageView
в нем. Затем я хочу перебирать массив и заполнять поля в макете xml в зависимости от того, что в массиве(который заполняется во время выполнения). Таким образом, создание нескольких копий XML-макета и заполнение полей уникальными данными. Теперь я понятия не имею, как вы можете повторно использовать это LinearLayout
таким образом, как TextView
s и 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);
источник: Ромен Парень