Итак, я понимаю, как использовать тег include, но у меня возникла проблема.
В основном я хочу иметь макет, определенный в xml, который содержит пару TextView
s и ImageView
. Затем я хочу выполнить итерацию по массиву и заполнить поля в макете xml в зависимости от того, что в массиве (который заполняется во время выполнения). Таким образом, создание нескольких копий макета xml и заполнение полей уникальными данными. Теперь я понятия не имею, как вы можете повторно использовать этот LinearLayout
таким образом, как в TextView
и ImageView
s внутри него есть постоянный id, и мне нужно сделать несколько копий этого макета.
Есть ли способ раздуть ресурс, а затем сделать его копию, которая будет работать ... Итак
LinearLayout one = new LinearLayout(inflater.inflate(R.layout.home, container, false));
^ К сожалению, такого конструктора нет.
Единственный способ сделать это все программно, но я предпочел бы иметь свойства представлений и LinearLayout
в xml, а не в коде. Это похоже на то, что я хочу, чтобы LinearLayout
был шаблоном, который вы можете сделать копиями, я думаю ... На самом деле не уверен, что это возможно.
Вы можете легко это сделать, вам просто нужно сломать его. Сначала загрузите макет, в который вы хотите вставить свои динамические представления. Затем вы раздуваете свой подъярус и заполняете его столько раз, сколько вам нужно. Затем вы добавляете представление в родительский макет и, наконец, устанавливаете представление содержимого операции в родительский вид.
Вот пример:
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);
вот файл main.xml, который я вставляю в:
<?xml version="1.0" encoding="utf-8"?>
и вот представление custom.xml, которое я раздуваю, заполняю и динамически вставляю:
<?xml version="1.0" encoding="utf-8"?>
Надеюсь, этот пример поможет!
Чтобы 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);
Source: Romain Guy