Как изменить значения во View, созданном программно?
Концептуально задача такая:
- Есть набор предметов с несколькими полями
- Все эти предметы нужно отобразить в ряд в определенном визуальном виде
Вопросов у меня два:
- Правильно ли я технически выполняю эту задачу
- Если правильно, нужна помощь в доводке. Если неправильно, подскажите как правильно
Делаю я так:
- Сделал активность (назовем ее "Каталог"), которая будет выполнять роль "Экрана со списком предметов". Выглядит она примерно так:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
// Тут еще какие-то элементы, не важно
<LinearLayout
android:id="@+id/activity_items_catalog_items_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
// В этот элемент планирую добавлять объекты
</LinearLayout>
</LinearLayout>
Как видите, в ней есть непосредственно контейнер под предметы.
- Сделал разметку (не активность, не фрагмент, а просто отдельный xml файл) под визуальный вид предмета, назовем ее "Превью предмета":
<LinearLayout
android:layout_width="98dp"
android:layout_height="96dp"
android:paddingLeft="3dp"
android:paddingRight="3dp"
android:paddingTop="3dp"
android:orientation="vertical"
android:background="@color/item_preview_background">
<ImageView
android:id="@+id/item_pic"
android:layout_width="90dp"
android:layout_height="66dp"
android:src="@drawable/weapon_09" // Это планирую заполнять программно
android:layout_gravity="center" />
<TextView
android:id="@+id/item_cost"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="4725" // И это тоже
android:textAlignment="center"
android:textStyle="bold"
android:textColor="@color/item_cost"
android:textSize="@dimen/item_preview_cost"
android:layout_gravity="center"/>
</LinearLayout>
Как видите, тут два элемента - картинка и цена предмета. Сейчас значения вписаны вручную, просто чтобы хоть что-то отображалось.
- Написал в onCreate активности "Каталог" нечто такое:
Iterable<Item> items = Items.getFakeItems();
LinearLayout itemsContainer = (LinearLayout) findViewById(R.id.activity_items_catalog_items_container);
LayoutInflater inflatter = getLayoutInflater();
for (Item item: items) {
View itemView = inflatter.inflate(R.layout.layout_item_preview_pic_cost, null);
// Тут планирую как-то достать элемент картинки и текста цены из созданной view и
// заполнить их значениями из item
itemsContainer.addView(itemView);
}
Т.е. нашел контейнер, создаю View под каждый предмет и добавляю это View в контейнер.
И вот где-то тут и возникли сомнения, правильно ли я делаю вообще, ибо выглядит топорно. Возможно есть какой-то идиоматичный способ, например, создать какой-то класс с полями, привязать к нему мою разметку "Превью предмета". Затем создать объект этого класса, установить значения полей. В самой же разметке как-то написать так, чтобы значения из этого объекта заполняли нужные места. А потом из объекта этого класса создавать View и уже добавлять в контейнер.