【问题标题】:set different span for a every row with GridLayoutManager使用 GridLayoutManager 为每一行设置不同的跨度
【发布时间】:2018-04-19 11:24:08
【问题描述】:

我想用GridLayoutManager为每一行设置不同的跨度。

 GridLayoutManager gridLayoutManager = new GridLayoutManager(getActivity(), 3);
        gridView.setLayoutManager(gridLayoutManager);
        gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
            @Override
            public int getSpanSize(int position) {

                Log.e("SPAN",position%3+" <=="+position);
                switch (position % 3) {
                    case 1:
                        return 1;

                    case 2:
                        return 2;

                    case 0:
                        return 3;

                    default:return 3;
                }
            }
        });

以上代码集如下(这里将imageview视为一个项目)

  • 具有单个 ImageView 的第一行

  • 第二行有三个 ImageView

  • 第三行有两个 ImageView。

【问题讨论】:

  • 但是已经达到了我的要求 70% 只有第三行需要跨越 3 个计数..这就是我想要的..

标签: android android-recyclerview gridlayoutmanager


【解决方案1】:

您的逻辑似乎有问题。尝试以下逻辑:

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

            Log.e("SPAN",position%3+" <=="+position);
            switch (position % 6) {
                case 0:
                    return 3;
                    break;
                case 1:
                case 2:
                case 3:
                case 4:
                    return 1;
                    break;
                case 5:
                    return 2;
                    break;
                default:return 3;
            }
        }
    });

【讨论】:

    【解决方案2】:
    int previousValue = 0;    
    SpanSizeLookup spanSizeLookup = new GridLayoutManager.SpanSizeLookup() {
                    override int  getSpanSize(position){
                        if (position == 0) {
                            previousValue = 6;
                            return previousValue ;
                        }else
                        if (previousValue == 6) {
                            previousValue =3;
                            return previousValue ;
                        } else if(previousValue == 3){
                           previousValue =2;
                           return previousValue ;
                    }else if(previousValue ==2){
                          previousValue  = 6;
                          return previousValue ;
                         }
                }
                GridLayoutManager glm = new GridLayoutManager(this, 6)
    
                glm.spanSizeLookup = spanSizeLookup;
                recycler_view.setLayoutManager(glm)
    

    【讨论】:

    • 你可以在getSpanSize()方法中使用switch
    • 1.第一行有 2 个图像视图。 2. 第二行有 1 个图像视图。 3. 第三行有 3 个图像视图。根据您的情况,其余的视图也有 3 个图像视图
    • @unknown 立即尝试。
    • 第一行有两个图像视图,其余的都是具有更新条件的单个图像视图
    • 其实就是将列的总数除以getspancount方法返回的数字
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-01
    • 2011-11-22
    • 1970-01-01
    • 1970-01-01
    • 2015-08-04
    • 1970-01-01
    相关资源
    最近更新 更多