Android 使用RecyclerView实现多列布局及其优劣

首先给大家推荐一下我老师大神的人工智能教学网站。教学不仅零基础,通俗易懂,而且非常风趣幽默,还时不时有内涵黄段子!点这里可以跳转到网站

前言

记录一下之前写的一个多列布局,经常用于筛选条件中,比如这样:

多列布局示例

这是一个4列数据和1列数据交错下的多列布局。之前我们写的时候用ScrollView包裹两个TextView作为Title,又包裹两个GridView作为4列数据,同时还要处理ScrollView和GridView的冲突(虽然很简单)。
现在可以直接使用RecyclerView一个布局来实现。接下来先介绍如何实现,再对比和之前实现方式优劣,即实用性。

使用RecyclerView实现

主要依靠GridLayoutMananger和它的一个方法setSpanSizeLookup来实现。

/*
  传入所有列数的最小公倍数,1和4的最小公倍数为4,即意味着每一列将被分为4格
*/
GridLayoutManager gridLayoutManager = new GridLayoutManager(this.getContext(), 4);

//设置表格,根据position计算在该position处1列占几格数据
gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
  @Override public int getSpanSize(int position) {
    //计算在哪个position时要显示1列数据,即columnCount / 1列 = 4格,即1列数据占满4格
    if (position == 0 || position == mTopGridData.size() + 1) {
      return 4;
    }

    //return 2即为columnCount / 2 = 2列,一格数据占2列,该行显示2列

    //1格1列,即改行有columnCount / 1 = 4列,该行显示4列
    return 1;
  }
});

recyclerView.setLayoutManager(gridLayoutManager);
recyclerView.setAdapter(new DoubleGridAdapter(getContext(), mTopGridData, mBottomGridList, this));//设置数据

这就是使用RecyclerView实现多列布局的方式,接下来说说两种方式的优劣。

两种方式优劣

  • 使用RecyclerView
    好处是仅用一个布局,减少了布局层次嵌套,有时候甚至可以把 完成 按钮也当做一列数据。
    但是这种方式乍一看很简单,其复杂性体现在对数据的处理上和UI变化上。筛选器中必须要把当前选中的Holder回调出来,保存其数据并更新其UI。尤其在有全部选项时或者多选时。当列越多思路必须要越清晰。
    这种实现也会随着需求越变越复杂而增加维护难度。
  • 使用ScrollView和GridView嵌套
    缺点是构建表格时比较繁琐(不停的累加GridView)和设置Adapter时代码较多。
    但有点很多。
    1.因为拆开写所以很清晰,大多数逻辑相同仅数据不一样,不会出大错。
    2.可以直接使用AbsListView的setChoiceMode方法,使用CheckedTextView时会自动更新UI,而且可以通过getCheckedItemPosition直接获取点选数据,更为方便。

这两种实现都写在DropDownMenu中的doubleGrid,你可以看到这两种实现的区别。

结语:

当列比较简单时,使用RecyclerView实现比较轻便;但比较复杂的表格时RecyclerView对比较难以数据,但不妨一试。自己在实际项目开发中有一个3、4列数据的,同时还有全部选项、并可以多选,还要有反选功能(点击该表格的全部后其他数据置灰),写的欲罢不能。所以在这总结一下,不过回过头来看,还是觉得使用RecyclerView实现要好一点,很有趣,还不错,可以试试。

点这里可以跳转到人工智能网站

发表评论