android.support.v7.widget.GridLayoutManager#setSpanSizeLookup ( )源码实例Demo

下面列出了android.support.v7.widget.GridLayoutManager#setSpanSizeLookup ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: RecyclerView_Divider   文件: GridFragment.java
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    mRecyclerView = (RecyclerView) view;
    GridLayoutManager layoutManager = new GridLayoutManager(view.getContext(), span);
    mRecyclerView.setLayoutManager(layoutManager);
    adapter = new GridAdapter(list);
    mRecyclerView.setAdapter(adapter);
    DividerItemDecoration itemDecoration = new DividerItemDecoration();
    itemDecoration.setDividerLookup(new AgileDividerLookup());
    mRecyclerView.addItemDecoration(itemDecoration);

    if (type == MainActivity.TYPE_AGILE) {
        layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
            @Override
            public int getSpanSize(int position) {
                return span / adapter.getItemViewType(position);
            }
        });
    }

}
 
private void initView() {
    mAdapter = new VoiceToolsAdapter();
    mAdapter.setOnVoicePlayListener(this);
    GridLayoutManager mLayoutManager = new GridLayoutManager(this, 4);
    mLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
        @Override
        public int getSpanSize(int position) {
            if (position == 0 || position == 9) {
                return 4;
            }
            return 1;
        }
    });
    mRecyclerView.setLayoutManager(mLayoutManager);
    mRecyclerView.setItemAnimator(null);
    mRecyclerView.setHasFixedSize(true);
    mRecyclerView.setAdapter(mAdapter);
}
 
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    if (type == TYPE_GRID_LAYOUT) {
        gridLayoutManager = new GridLayoutManager(getActivity(), 2);
        mRecyclerView.setLayoutManager(gridLayoutManager);//这里用线性宫格显示 类似于grid view
    } else if (type == TYPE_STAGGERED_GRID_LAYOUT) {
        mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(2, OrientationHelper.VERTICAL));//这里用线性宫格显示 类似于瀑布流
    } else {
        mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));//这里用线性显示 类似于list view
    }
    mAdapter = new HeaderBottomItemAdapter(getActivity());
    mRecyclerView.setAdapter(mAdapter);
    if (gridLayoutManager != null) {//设置头部及底部View占据整行空间
        gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
            @Override
            public int getSpanSize(int position) {
                return (mAdapter.isHeaderView(position) || mAdapter.isBottomView(position)) ? gridLayoutManager.getSpanCount() : 1;
            }
        });
    }
}
 
源代码4 项目: FamilyChat   文件: RcvSectionAdapter.java
@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView)
{
    RecyclerView.LayoutManager manager = recyclerView.getLayoutManager();
    if (manager instanceof GridLayoutManager)
    {
        final GridLayoutManager gridManager = ((GridLayoutManager) manager);
        gridManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup()
        {
            @Override
            public int getSpanSize(int position)
            {
                if (isInSectionPos(position)
                        || isInHeadViewPos(position)
                        || isInFootViewPos(position)
                        || isInLoadMorePos(position)
                        || isInEmptyStatus())
                    return gridManager.getSpanCount();
                else
                    return 1;
            }
        });
        gridManager.setSpanCount(gridManager.getSpanCount());
    }
}
 
源代码5 项目: styT   文件: HeaderAndFooterWrapper.java
@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
    super.onAttachedToRecyclerView(recyclerView);
    //为了兼容GridLayout
    RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager();
    if (layoutManager instanceof GridLayoutManager) {
        final GridLayoutManager gridLayoutManager = (GridLayoutManager) layoutManager;
        final GridLayoutManager.SpanSizeLookup spanSizeLookup = gridLayoutManager.getSpanSizeLookup();

        gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
            @Override
            public int getSpanSize(int position) {
                if (isHeaderViewPos(position)) {
                    return gridLayoutManager.getSpanCount();
                } else if (isFooterViewPos(position)) {
                    return gridLayoutManager.getSpanCount();
                }
                if (spanSizeLookup != null)
                    return spanSizeLookup.getSpanSize(position);
                return 1;
            }
        });
        gridLayoutManager.setSpanCount(gridLayoutManager.getSpanCount());
    }

}
 
源代码6 项目: Pasta-for-Spotify   文件: SearchFragment.java
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_recycler, container, false);
    unbinder = ButterKnife.bind(this, rootView);

    if (list == null) list = new ArrayList<>();
    else spinner.setVisibility(View.GONE);

    adapter = new SectionedOmniAdapter((AppCompatActivity) getActivity(), list);
    manager = new GridLayoutManager(getContext(), PreferenceUtils.getColumnNumber(getContext(), false));
    manager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
        @Override
        public int getSpanSize(int position) {
            if (adapter.getItemViewType(position) == 0 || adapter.getItemViewType(position) == 4)
                return manager.getSpanCount();
            else return 1;
        }
    });
    recycler.setLayoutManager(manager);
    recycler.setAdapter(adapter);

    return rootView;
}
 
源代码7 项目: NetEasyNews   文件: ChannelManagerActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_channel_manager);
    getIntentData();
    context = this;
    initToolbar();
    listDataSave = new ListDataSave(this, "channel");
    mRecyclerView = (RecyclerView) findViewById(com.example.channelmanager.R.id.id_tab_recycler_view);
    GridLayoutManager gridLayout = new GridLayoutManager(context, 4);
    gridLayout.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
        @Override
        public int getSpanSize(int position) {
            boolean isHeader = mRecyclerAdapter.getItemViewType(position) == IChannelType.TYPE_MY_CHANNEL_HEADER ||
                    mRecyclerAdapter.getItemViewType(position) == IChannelType.TYPE_REC_CHANNEL_HEADER;
            return isHeader ? 4 : 1;
        }
    });
    mRecyclerView.setLayoutManager(gridLayout);
    mRecyclerView.addItemDecoration(new GridItemDecoration(APPConst.ITEM_SPACE));
    initData();
    mRecyclerAdapter = new ChannelAdapter(context, mRecyclerView, mMyChannelList, mRecChannelList, 1, 1);
    mRecyclerAdapter.setChannelItemClickListener(this);
    mRecyclerView.setAdapter(mRecyclerAdapter);
}
 
@Override
public void setLayoutManager(final RecyclerView recyclerView) {
    final GridLayoutManager gridLayoutManager = new GridLayoutManager(recyclerView.getContext(), getColumnSize() * getColumnMultiplier());
    gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
        @Override
        public int getSpanSize(int position) {

            if(!(recyclerView.getAdapter() instanceof SpannableRecyclerAdapter)){
                throw new IllegalStateException("RecyclerView adapter must extend SpannableRecyclerAdapter");
            }

            return AptoideUtils.UI.getSpanSize(recyclerView, position);
        }
    });

    gridLayoutManager.setSpanCount(getColumnSize() * getColumnMultiplier());
    recyclerView.setLayoutManager(gridLayoutManager);
}
 
源代码9 项目: LQRBiliBlili   文件: RecommendFragment.java
@Override
public void setRecyclerAdapter(RecommendMultiItemAdapter adapter) {
    GridLayoutManager gridLayoutManager = new GridLayoutManager(_mActivity, 2);
    mRecyclerView.setLayoutManager(gridLayoutManager);
    mRecyclerView.setAdapter(adapter);
    gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
        @Override
        public int getSpanSize(int position) {
            // 上拉加载更多视图
            if (position == adapter.getData().size()) {
                return 2;
            }
            return adapter.getData().get(position).getSpanSize();
        }
    });
}
 
源代码10 项目: easy-header-footer-adapter   文件: MainActivity.java
private RecyclerView.LayoutManager getLayoutManager() {
    switch (layoutManagerType) {
        case LayoutManager.LINEAR:
            return new LinearLayoutManager(this);
        case LayoutManager.GRID:
            GridLayoutManager result = new GridLayoutManager(this, 2);

            result.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
                @Override
                public int getSpanSize(int position) {
                    if (position % 3 == 0) { // Something to show
                        return 2;
                    } else {
                        return 1;
                    }
                }
            });

            return result;
        case LayoutManager.STAGGERED_GRID:
            return new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL);
        default:
            throw new IllegalStateException("layoutManagerType has a unknown value: " +
                    layoutManagerType);
    }
}
 
源代码11 项目: LazyRecyclerAdapter   文件: BindSuperAdapter.java
@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
    super.onAttachedToRecyclerView(recyclerView);
    adapter.onAttachedToRecyclerView(recyclerView);
    RecyclerView.LayoutManager manager = recyclerView.getLayoutManager();
    if (manager instanceof GridLayoutManager) {
        final GridLayoutManager gridManager = ((GridLayoutManager) manager);
        gridManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
            @Override
            public int getSpanSize(int position) {
                return (isHeader(position) || isFooter(position) || isRefreshHeader(position))
                        ? gridManager.getSpanCount() : 1;
            }
        });
    }
}
 
源代码12 项目: MaterialHome   文件: EBookCategoryDetailActivity.java
@Override
protected void initEvents() {
    major = getIntent().getStringExtra("major");
    gender = getIntent().getStringExtra("gender");
    setTitle(major == null ? "category" : major);

    int spanCount = getResources().getInteger(R.integer.home_span_count);
    eBookRankPresenter = new EBookPresenterImpl(this);
    bookInfoResponses = new ArrayList<>();
    mSwipeRefreshLayout.setColorSchemeResources(R.color.recycler_color1, R.color.recycler_color2,
            R.color.recycler_color3, R.color.recycler_color4);

    //设置布局管理器
    mLayoutManager = new GridLayoutManager(this, spanCount);
    mLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
        @Override
        public int getSpanSize(int position) {
            return mListAdapter.getItemColumnSpan(position);
        }
    });
    mLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
    mRecyclerView.setLayoutManager(mLayoutManager);

    //设置adapter
    mListAdapter = new EBookListAdapter(this, bookInfoResponses, spanCount);
    mRecyclerView.setAdapter(mListAdapter);

    //设置Item增加、移除动画
    mRecyclerView.setItemAnimator(new DefaultItemAnimator());
    mRecyclerView.addOnScrollListener(new RecyclerViewScrollDetector());
    mSwipeRefreshLayout.setOnRefreshListener(this);
    onRefresh();
}
 
private void initView() {
    mAdapter = new CoachRankAdapter();
    GridLayoutManager layoutManager = new GridLayoutManager(this, 3, GridLayoutManager.VERTICAL, false);
    layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
        @Override
        public int getSpanSize(int position) {
            if (position == 0) {
                return 3;
            }
            return 1;
        }
    });
    mRecyclerView.setLayoutManager(layoutManager);
    mRecyclerView.addItemDecoration(new GridSpacingItemDecoration((int) PixelUtil.dp2px(20), 3, 1));
}
 
源代码14 项目: YCRefreshView   文件: RecyclerArrayAdapter.java
/**
 * 页面进入时,显示RecyclerView,调用onAttachedToRecyclerView,做一些注册工作;
 * 页面退出时,销毁RecyclerView,调用onDetachedFromRecyclerView,做一些解注册和其他资源回收的操作。
 * @param recyclerView                      recyclerView
 */
@Override
public void onAttachedToRecyclerView(@NonNull RecyclerView recyclerView) {
    super.onAttachedToRecyclerView(recyclerView);
    //增加对RecyclerArrayAdapter奇葩操作的修复措施
    registerAdapterDataObserver(new FixDataObserver(recyclerView));
    if (mSetHeaderAndFooterSpan){
        //下面是处理grid试图上拉加载的问题
        RecyclerView.LayoutManager manager = recyclerView.getLayoutManager();
        if (manager instanceof GridLayoutManager) {
            final GridLayoutManager gridManager = ((GridLayoutManager) manager);
            gridManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
                @Override
                public int getSpanSize(int position) {
                    // 如果当前是footer的位置,那么该item占据2个单元格,正常情况下占据1个单元格
                    int itemViewType = getItemViewType(position);
                    //注意,具体可以看DefaultEventDelegate类中的EventFooter类代码
                    //如果是头部header或者底部footer,则直接
                    if (itemViewType>=DefaultEventDelegate.EventFooter.HIDE &&
                            itemViewType<=DefaultEventDelegate.EventFooter.SHOW_NO_MORE){
                        RefreshLogUtils.d("onAttachedToRecyclerView----这个是header和footer");
                        return gridManager.getSpanCount();
                    }else {
                        RefreshLogUtils.d("onAttachedToRecyclerView----");
                        return 1;
                    }
                }
            });
        }
    }
}
 
源代码15 项目: tribbble   文件: ArchiveFragment.java
@Override public void bind(List<Shot> shots) {
  mRecyclerView.setAdapter(mAdapter = new ArchiveAdapter(shots, mRecyclerView, mItemListener));
  GridLayoutManager layoutManager = new GridLayoutManager(getContext(), 2);
  layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
    @Override public int getSpanSize(int position) {
      return mAdapter.getItemViewType(position) == ArchiveAdapter.TYPE_SHOT ? 1 : 2;
    }
  });
  mRecyclerView.setLayoutManager(layoutManager);
}
 
源代码16 项目: LightAdapter   文件: GridLoadMoreActivity.java
private void init() {
    setSupportActionBar((Toolbar) findViewById(R.id.toolbar));
    recyclerView = (RecyclerView) findViewById(R.id.recyclerView);

    swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipeRefreshLayout);
    adapter = new LightAdapter();
    GridLayoutManager layoutManager = new GridLayoutManager(this, 2);
    layoutManager.setSpanSizeLookup(adapter.spanSizeLookup(2, 2));
    recyclerView.setLayoutManager(layoutManager);
    recyclerView.setAdapter(adapter);
    swipeRefreshLayout.setOnRefreshListener(this);
}
 
源代码17 项目: CatanArchitecture   文件: Folders.java
@Override protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.folders);

  foldersRecyclerView = (RecyclerView) findViewById(R.id.folders);

  foldersRecyclerView.setHasFixedSize(true);

  int squareSideLengthInPixels = getResources().getDimensionPixelSize(R.dimen.square_side_length);
  float radius = radius(squareSideLengthInPixels);
  float adjacent = adjacent(radius);

  int spacingInPixels = -(Math.round(radius - adjacent));

  foldersRecyclerView.addItemDecoration(new SpacesItemDecoration(spacingInPixels));

  layoutManager = new GridLayoutManager(this, SPAN_COUNT, LinearLayoutManager.VERTICAL, false);
  layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
    @Override public int getSpanSize(int position) {
      return position % 3 == 0 ? 2 : 1;
    }
  });

  foldersRecyclerView.setLayoutManager(layoutManager);

  eventsPort = obtainEventsPort();
  foldersPresenter = new FoldersPresenter(this, eventsPort);
}
 
源代码18 项目: mosby   文件: HomeFragment.java
@Nullable @Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
    @Nullable Bundle savedInstanceState) {
  View view = inflater.inflate(R.layout.fragment_home, container, false);
  unbinder = ButterKnife.bind(this, view);

  adapter = new HomeAdapter(inflater, this);
  layoutManager = new GridLayoutManager(getActivity(), spanCount);
  layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
    @Override public int getSpanSize(int position) {

      int viewType = adapter.getItemViewType(position);
      if (viewType == HomeAdapter.VIEW_TYPE_LOADING_MORE_NEXT_PAGE
          || viewType == HomeAdapter.VIEW_TYPE_SECTION_HEADER) {
        return spanCount;
      }

      return 1;
    }
  });

  /*
  recyclerView.addItemDecoration(new GridSpacingItemDecoration(spanCount,
      getResources().getDimensionPixelSize(R.dimen.grid_spacing), true));
      */

  recyclerView.setAdapter(adapter);
  recyclerView.setLayoutManager(layoutManager);

  return view;
}
 
源代码19 项目: Movie-Check   文件: ListPopularMoviesActivity.java
@Override
public void showMovies(final List<Movie> newMovieList) {
    if (movieList == null) {
        movieList = newMovieList;
    } else {
        movieList.addAll(newMovieList);
    }
    linearLayoutAnyFounded.setVisibility(View.GONE);
    linearLayoutLoadFailed.setVisibility(View.GONE);
    recyclerViewMovies.setVisibility(View.VISIBLE);
    final GridLayoutManager layoutManager = new GridLayoutManager(this, columns, GridLayoutManager.VERTICAL, false);
    layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
        @Override
        public int getSpanSize(int position) {
            return position >= movieList.size() ? columns : 1;
        }
    });
    recyclerViewMovies.setLayoutManager(layoutManager);
    recyclerViewMovies.setItemAnimator(new DefaultItemAnimator());
    listViewAdapter = new ListViewAdapterWithPagination(
            new MovieListAdapter(movieList, new OnItemClickListener<Movie>() {
                @Override
                public void onClick(Movie movie, View view) {
                    startActivity(MovieProfileActivity.newIntent(ListPopularMoviesActivity.this, movie), ActivityOptionsCompat.makeSceneTransitionAnimation(ListPopularMoviesActivity.this, view.findViewById(R.id.imageview_poster), "moviePoster").toBundle());
                }

                @Override
                public void onLongClick(Movie movie, View view) {

                }
            }
            ),
            new OnShowMoreListener() {
                @Override
                public void showMore() {
                    scrollToItem = layoutManager.findFirstVisibleItemPosition();
                    presenter.loadMovies(++page);
                }
            },
            itensPerPage);
    recyclerViewMovies.setAdapter(listViewAdapter);
    recyclerViewMovies.scrollToPosition(scrollToItem);
}
 
源代码20 项目: outlay   文件: MainFragment.java
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    ((DrawerActivity) getActivity()).setupDrawer(currentUser);

    initStaticContent();

    GridLayoutManager gridLayoutManager = new GridLayoutManager(getActivity(), 4);
    gridLayoutManager.setSpanSizeLookup(onSpanSizeLookup);
    categoriesGrid.setLayoutManager(gridLayoutManager);
    adapter = new CategoriesGridAdapter();
    categoriesGrid.setAdapter(adapter);

    adapter.attachNumpadEditable(new NumpadEditable() {
        @Override
        public String getText() {
            return amountText.getText().toString();
        }

        @Override
        public void setText(String text) {
            amountText.setText(text);
        }
    }, validator);
    adapter.setOnCategoryClickListener(category -> {
        if (validator.valid(amountText.getText().toString())) {
            Expense e = new Expense();
            e.setCategory(category);
            if (!TextUtils.isEmpty(expenseNote.getText())) {
                e.setNote(expenseNote.getText().toString());
            }
            e.setAmount(new BigDecimal(amountText.getText().toString()));
            e.setReportedWhen(selectedDate);
            analytics().trackExpenseCreated(e);
            if(!TextUtils.isEmpty(e.getNote())) {
                analytics().trackNoteEntered();
            }
            presenter.createExpense(e);
            cleanAmountInput();
        } else {
            validator.onInvalidInput(amountText.getText().toString());
        }
    });


    expensesAdapter = new TimelineExpensesAdapter();
    expensesAdapter.setOnExpenseClickListener(e -> Navigator.goToExpenseDetails(getActivity(), e, true));
    decor = new StickyHeaderDecoration(expensesAdapter);
    LinearLayoutManager stickyHeaderLayoutManager = new LinearLayoutManager(getActivity());
    timelineRecycler.setLayoutManager(stickyHeaderLayoutManager);
    timelineRecycler.setAdapter(expensesAdapter);
    timelineRecycler.addItemDecoration(decor);
}