Как создать макет с разными типами карт? - PullRequest
0 голосов
/ 09 октября 2019

Я пытаюсь разработать приложение, которое будет показывать статистику. Данные будут получены из нескольких API и возвращены в виде JSONArray. Я запутался в том, стоит ли мне создавать отдельные обзоры (и) переработчика для каждой карты, поскольку данные взяты из разных списков / моделей ИЛИ я должен создать один просмотрщик / один адаптер? Каков наилучший способ достижения макета, который приведен ниже. Пожалуйста, помогите мне с рабочим кодом. Я новичок в этом. :

enter image description here

Ответы [ 5 ]

1 голос
/ 09 октября 2019

Recyclerview используется для динамического отображения большого количества похожих предметов.

У вас есть несколько карт с различным представлением.

Лучший способ добиться этого - использовать режим прокрутки -> Линейный макет -> КартаВид.

Как упомянул Md. Asaduzzaman

Визит https://stackoverflow.com/a/58298078/9186263

0 голосов
/ 09 октября 2019

RecyclerView отлично работает, если вы хотите перерабатывать представления . Это означает повторное использование фрагментов представлений. Но в вашем случае, если элементы слишком различны между собой, это абсолютно бессмысленно.

Один из подходов - это иметь иерархию, подобную предложенной в других ответах:

  1. ScrollView:
  2. Группа представлений, позволяющая упорядочивать карты по мере необходимости
  3. Ваши карты.

Вы можете использовать FlexBoxLayout в качестве контейнера для ваших карт, если вы хотите, чтобы некоторые из них были рядом. Поскольку FlexBox действительно стоит знать, он довольно flex ible. Если это не так, вы можете пойти со старым добрым LinearLayout, как предложено г-ном Асадуззаманом.

0 голосов
/ 09 октября 2019

Почему вы хотите использовать RecyclerView для этого простого представления. RecyclerView используется для отображения списка данных. Вы просто используете ScrollView в качестве родителя и CardView для каждого ребенка.

<ScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fillViewport="true"
    android:scrollbars="none">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <!-- CardView -->
        <!-- CardView -->
        <!-- CardView -->
        <!-- CardView -->
    </LinearLayout>
</ScrollView>
0 голосов
/ 09 октября 2019

Есть две вещи: во-первых, если вы знаете общее количество элементов, которые необходимо отобразить, а затем не используете RecyclerView, вам будет сложнее справиться с этим, потому что у каждого дочернего элемента разная схема размещения в вашем случае. Во-вторых, если общее количество не является фиксированным, то для этого проверьте следующую ссылку. https://www.journaldev.com/12372/android-recyclerview-example

0 голосов
/ 09 октября 2019

В вашем adapter классе Override getItemViewType, как показано ниже.

@Override
    public int getItemViewType(int position) {

        if (position % 3 == 0) {
            return 1;
        } else if (position % 2 == 0) {
            return 2;
        } else {
            return 3;
        }
    }

И oncreateViewHolder метод return view в соответствии с view type. как показано ниже

@Override
    public CustomViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        switch (viewType) {
            case 1:
                View viewONE = LayoutInflater.from(parent.getContext()).inflate(R.layout.category_template_one, parent, false);
                CustomViewHolder rowONE = new CustomViewHolder(viewONE);
                return rowONE;

            case 2:
                View viewTWO = LayoutInflater.from(parent.getContext()).inflate(R.layout.category_template_two, parent, false);
                CustomViewHolder rowTWO = new CustomViewHolder(viewTWO);
                return rowTWO;

            case 3:
                View viewTHREE = LayoutInflater.from(parent.getContext()).inflate(R.layout.category_template_three, parent, false);
                CustomViewHolder rowTHREE = new CustomViewHolder(viewTHREE);
                return rowTHREE;

        }
        return null;
    }

См. этот для полного примера.

...