Android利用ListView实现多种Item的复杂布局

在Android开发中,可能会遇到一个可滚动且布局比较复杂的界面,但它并不是一个纯粹的List,类似如下图:

demo.png

通常实现方法可以直接用一个ScrollView将所有内容包起来,里面是列表的部分在代码中用动态添加布局的方式实现;或者外层ScrollView,里面列表部分用ListView(或RecyclerView)实现,但这样需要解决滑动冲突问题(有时并不能很好解决)……所以最好不要同时使用ScrollView和ListView(或RecyclerView),但如果单使用ScrollView,每次滑动返回时都会重新动态加载,如果页面图片比较多,可能会造成卡顿,所以要自己做缓存判断的处理,而ListView自带有缓存机制,处理相对比较方便。

那这种不是纯粹List的布局用ListView如何实现?它也并不是只是头尾部分不相同而已(ListView可以addHeader, addFooter), 所以要将它分成一个个不同类型的item。下面展示一个之前公司项目所实践用到的一个例子,效果demo如图:

ComplexListViewDemo.gif

嗯,其实也没什么难度,也就是如何将整个页面的划分为不同的item,并处理不同的数据模块,使代码更加模块化,直观而且更容易维护。其中HomeAdapter是处理List不同item的适配器,相对于普通适配器多了一个getItemViewType()方法的处理;ImageAdapter是图片轮播适配器;HomeItem是整个页面的数据模型,包含了所有item的不同数据模型,接收到网络数据时需要对数据加工再设置到HomeItem,然后根据ItemType 作为不同item类型的判断,再根据不同item获取对应的字段;各个item的数据处理是在单独一个ViewHolder上处理……

class HomeItem{
  private ItemType itemType; //作为不同item类型的判断
  private String tagName;
  private Special special;
  private Ad ad;
  private MenuPo[] menuPos;
  private List<MealShow> mealShowList;
  private List<TalentShow> talentShowList;
//……
}

另外,可以看到当上滑时,搜索框会悬停在顶部,此处用到一个小技巧,障眼法,单独的搜索框一直在顶部,通过在滑动的过程中控制它的显示和隐藏即可

mListView.setOnScrollListener(new AbsListView.OnScrollListener(){

  @Override
  public void onScrollStateChanged(AbsListView absListView, int i){
  }
  @Override

  public void onScroll(AbsListView absListView, int firstVisibleItem,int visibleItemCount, int totalItemCount) {
    if (firstVisibleItem >= 1) {
      rlSearchBar.setVisibility(View.VISIBLE);
    } else {
    rlSearchBar.setVisibility(View.GONE);
    }
  }
});

Talk is cheap, read the code.

Github: ComplexListViewDemo

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,633评论 25 709
  • 内容抽屉菜单ListViewWebViewSwitchButton按钮点赞按钮进度条TabLayout图标下拉刷新...
    皇小弟阅读 47,003评论 22 665
  • 原创2 《志慧学众筹 众筹的智慧》 ……“筹”字的由来 众筹七期 冯...
    冯志慧阅读 3,012评论 0 0
  • 迷迷回忆,瑟瑟冷倚,转青青之大愉,乱纷纷之落绮。眩而难立,杂而难梦,飘逸幻居,魂栖玉宇。 万万冷清随意。黛染重山...
    许你一生爱你阅读 1,605评论 0 3
  • 七夕幻想 年年总有个叫“七夕”的日子, 悄悄地来。悄悄地去, 如满月下的那抹轻云, 一点点温柔,一点点浪漫。 想像...
    不语不问阅读 845评论 2 4