Android Staggered Grdiv Просмотр последнего элемента в полноэкранном режиме, если он автономный

У меня есть следующий вид переработчика с Staggered Grid Layout Manager:

введите здесь описание изображения

Я хотел бы адаптировать каждый элемент представления сетки в шахматном порядке следующим образом (последний элемент полноэкранный, если он автономный):

введите здесь описание изображения

Основная.java:

   staggeredGridLayoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
    superEffectiveRecyclerView.setLayoutManager(staggeredGridLayoutManager);
    effectivenessSuperEffectiveAdapter = new EffectivenessRecyclerAdapter(this, effectivenessesSuperEffective);
    superEffectiveRecyclerView.setItemAnimator(new DefaultItemAnimator());
    superEffectiveRecyclerView.setAdapter(effectivenessSuperEffectiveAdapter);

list_item_type.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal">

<TextView
    android:id="@+id/effectiveness_effect"
    android:layout_width="33dp"
    android:layout_height="25dp"
    android:layout_marginTop="4dp"
    android:layout_marginBottom="4dp"
    android:gravity="center"
    android:text="@string/placeholder"
    android:textColor="#f000"
    android:textSize="14sp" />

<TextView
    android:id="@+id/effectiveness_name"
    android:layout_width="81dp"
    android:layout_height="25dp"
    android:layout_marginTop="4dp"
    android:layout_marginBottom="4dp"
    android:gravity="center"
    android:text="@string/placeholder"
    android:textColor="#f000"
    android:textSize="14sp" />
    </LinearLayout>

content_main.xml:

  <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/super_efective_recycler_view"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:scrollbars="vertical"  />

Как я могу этого добиться?

РЕДАКТИРОВАТЬ: по-видимому, установка:

     StaggeredGridLayoutManager.LayoutParams layoutParams = (StaggeredGridLayoutManager.LayoutParams) holder.itemView.getLayoutParams();
    if(Objects.nonNull(layoutParams)){
        if (getItemCount() % 3 == 1 && position == getItemCount() - 1) {
            layoutParams.setFullSpan(true);
        }
    }

В результате держателя вида это:

введите здесь описание изображения

Однако это не совсем то, что я хочу, мне нужен только последний элемент в полноэкранном режиме.


person Nexussim Lements    schedule 23.07.2020    source источник
comment
чтобы было ясно, вы хотите, чтобы последний элемент был полноэкранным, если он автономен. Правильно?   -  person Jyotish Biswas    schedule 23.07.2020
comment
@JyotishBiswas Да, точно   -  person Nexussim Lements    schedule 23.07.2020
comment
вы проверили staggeredGridLayoutManager.setFullSpan(true);?   -  person hassan moradnezhad    schedule 23.07.2020
comment
@hassanmoradnezhad проверьте мой вопрос об обновлении   -  person Nexussim Lements    schedule 23.07.2020


Ответы (1)


Вы можете попробовать это

public final void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) {
    if (size % 2 == 1 && position == size - 1) {
        StaggeredGridLayoutManager.LayoutParams layoutParams = (StaggeredGridLayoutManager.LayoutParams) viewHolder.itemView.getLayoutParams();
        layoutParams.setFullSpan(true);
    }
}

Ссылка Установка размера диапазона одной строки в StaggeredGridLayoutManager

РЕДАКТИРОВАТЬ

Вы также можете попробовать gridlayout, если хотите установить это, когда вы устанавливаете layoutManager в свой recyclerview, а размер = размер вашего списка, который вы передаете в своем адаптере.

 gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
        @Override
        public int getSpanSize(int position) {
            // 3 is the sum of items in one repeated section
            if (size%2==1&&position==size-1)
                return 1;
            else return 2;
            throw new IllegalStateException("internal error");
        }
    });
person Jyotish Biswas    schedule 23.07.2020
comment
Откуда я беру размер? - person Nexussim Lements; 23.07.2020
comment
здесь размер - это то, что вы возвращаете в getItemCount - person Jyotish Biswas; 23.07.2020
comment
вы добавили этот фильтр if (size % 2 == 1 && position == size - 1) ? - person Jyotish Biswas; 23.07.2020
comment
тогда вам следует использовать Simple Gridlayout, если у вас нет проблем - person Jyotish Biswas; 23.07.2020
comment
Давайте продолжим обсуждение в чате. - person Jyotish Biswas; 23.07.2020