Размер диапазона RecycleView

1

Изображение 174551

Я пытаюсь создать макет, подобный изображению выше с RecyclerView в сочетании с GridLayoutManager, я попытался установить setSpanSizeLookup на основе позиции, но не смог имитировать проект выше.

Кто-нибудь может помочь?

    mRecyclerView = (RecyclerView) contentView;
    mRecyclerView.setHasFixedSize(false);

    GridLayoutManager gridLayoutManager = new GridLayoutManager(getActivity(), 3);
    gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
        @Override
        public int getSpanSize(int position) {
            return 3 - (position % 3);
        }
    });

    mRecyclerView.setLayoutManager(gridLayoutManager);

..

Что я получаю
Изображение 174551

  • 1
    это длинное видео, но я предлагаю вам посмотреть этот youtube.com/watch?v=-C5I1DAviJ8
  • 0
    Спасибо за помощь @Nilesh, я проверю это.
Теги:
android-recyclerview
gridlayoutmanager

5 ответов

1
Лучший ответ

Ну, вы хотите, чтобы чередующиеся "ряды" были равномерно разделены между двумя ячейками. Для равномерного разделения требуется четное количество столбцов, а 3 - не четное число. Итак, измените это на 2.

Теперь вы хотите getSpanSize() вернуть (по строке):

  • позиция 0 = 2 (т.е. охватывать обе ячейки)
  • позиции 1 и 2 = 1 (то есть каждый занимает одну ячейку)
  • позиция 3 = 2
  • позиции 4 и 5 = 1
  • и др.

(position % 3) > 0 ? 1 : 2, похоже, даст вам это.

  • 0
    если я хочу 3 столбца 2 столбца 3 столбца, как я могу добиться этого
  • 0
    Есть ли проблемы с производительностью при использовании пролетов? (например, что если макет имеет 12 столбцов в строке, а фактические элементы будут 3 или 4 в строке).
Показать ещё 1 комментарий
0

Хорошо, я нашел решение, чтобы получить этот макет сначала  GrideLayoutManager вот так.

GrideLayoutManager gridLayoutManager = new GridLayoutManager(context,2 , LinearLayoutManager.VERTICAL ,false) ;

Здесь вы указываете андроиду, что одна строка будет состоять из 2 пролетов затем сделайте getSpanSize таким образом.

gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
    @Override
    public int getSpanSize(int position) {

        return  position % 3 == 0 ? 2: 1  
   }
});

Это означает, что каждая позиция, деленная на 3, занимает 2 диапазона (одна строка)

0
 Try this i tried it for you



val spanSizeLookup = object : GridLayoutManager.SpanSizeLookup() {
                    override fun getSpanSize(position: Int): Int {
                        if (position == 0) {
                            return 2
                        } else if (position == 1 || position == 2)
                            return 1
                        else if (position == 3)
                            return 2
                        else return 1

    }
    }

     val glm = GridLayoutManager(this, 2)

                glm.spanSizeLookup = spanSizeLookup
                recycler_view.layoutManager = glm
0

Я решил это. это мой код, вы получите тот же самый желаемый результат

GridLayoutManager mLayoutManager = new GridLayoutManager(this, 2);

    mLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
        @Override
        public int getSpanSize(int position) {

            int i = 3 - (position % 3);

            switch(i){
                case 1:
                    return 1;
                case 2:
                    return 1;
                case 3:
                    return 2;
                default:    
                    return 2; \\Optional Since it will not have a default case with the given formula
            }
-3

Вы можете добавить следующее к своему onCreate():

   GridLayoutManager layoutManager=new GridLayoutManager(this,10);
    layoutManager.setSpanSizeLookup(new 
    GridLayoutManager.SpanSizeLookup() {
        @Override
        public int getSpanSize(int position) {

            int index = position % 2;

            switch(index){
                case 0: return 1;
                case 1: return 2;
                }
         }
  }

после этого установите layoutmanager на recyclerview

recyclerview.setLayoutManager(layoutManager);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню