Как изменить значения во View, созданном программно?

Концептуально задача такая:

  • Есть набор предметов с несколькими полями
  • Все эти предметы нужно отобразить в ряд в определенном визуальном виде

Вопросов у меня два:

  1. Правильно ли я технически выполняю эту задачу
  2. Если правильно, нужна помощь в доводке. Если неправильно, подскажите как правильно

Делаю я так:

  1. Сделал активность (назовем ее "Каталог"), которая будет выполнять роль "Экрана со списком предметов". Выглядит она примерно так:
    <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>

Как видите, в ней есть непосредственно контейнер под предметы.

  1. Сделал разметку (не активность, не фрагмент, а просто отдельный 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>

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

  1. Написал в 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 и уже добавлять в контейнер.


Ответы (0 шт):