Эффективно отображать много видов в FlexboxLayout - PullRequest
0 голосов
/ 04 апреля 2020

Моя цель - эффективно отображать множество TextViews (с фоном) в FlexboxLayout (или что-то подобное).

Я хочу отображать информацию об актерах и членах команды из mov ie в виде тип стиля «тега»

Как выглядит макет (помечен один из FlexboxLayouts)

Я раздуваю TextViews динамически через LayoutInflater в FlexboxLayout. Проблема заключается, конечно, в том, что при большом количестве данных (что означает много просмотров , иногда 30 или более в более чем 20 Flexbox-Layouts) время создания моего фрагмента / действия увеличивается, и активность занимает больше времени, чтобы открыть .

TextView, который я раздуваю:

<TextView 
      xmlns:android="http://schemas.android.com/apk/res/android"
      android:id="@+id/tag_name"
      android:layout_width="wrap_content"
      android:layout_height="30dp"
      android:layout_margin="5dp"
      android:paddingStart="10dp"
      android:paddingEnd="10dp"
      android:gravity="center_vertical"
      android:background="@drawable/bg_tag"
      android:textColor="?android:textColorSecondary"
      android:text="@string/placeholder" />

Моя компоновка контейнера (TextViews раздуваются в FlexboxLayout @+id/fxl_names):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:app="http://schemas.android.com/apk/res-auto"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical">

  <TextView
    android:id="@+id/txt_names"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textColor="?attr/colorOnBackground"
    android:padding="5dp"
    android:textSize="16sp"
    android:textStyle="bold"
    android:text="test" />

  //TextViews get inflated into this FlexboxLayout

  <com.google.android.flexbox.FlexboxLayout
    android:id="@+id/fxl_names"
    app:flexWrap="wrap"
    android:animateLayoutChanges="true"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

  <com.google.android.material.button.MaterialButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/view_more"
    android:visibility="gone"
    android:layout_margin="0dp"
    android:text="Show all"
    style="@style/Widget.MaterialComponents.Button.TextButton.Dialog" />

</LinearLayout>

Спасибо за любую помощь / совет по оптимизации этого макета!

1 Ответ

0 голосов
/ 04 апреля 2020

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

Для решения вашей проблемы, возможно, вам пришлось использовать RecyclerView вместо FlexBoxLayout лучшее решение на мой взгляд. И FlexBoxLayoutManager для организации ваших представлений.

В репозитории Android FlexBoxLayout

есть пример
...