最近在开发项目中遇到了实现类似淘宝首页的需求,使用listView可以解决,在此记录一下。

实现步骤:

  • 重写 getViewTypeCount() – 返回你有多少个不同的布局
  • 重写 getItemViewType(int) – 由position返回view type id
  • 根据view item的类型,在getView中创建正确的convertView

下面是代码示例:

Activity:

HomeItem jchdItem = new HomeItem();
jchdItem.setItemType(ItemType.JCHD);
homeItems.add(jchdItem);

HomeItem yhhdItem = new HomeItem();
yhhdItem.setItemType(ItemType.YHHD_LIST);
List<YhhdBean> yhhdLists = new ArrayList<>();
for (int i = 0; i < privilege.size(); i++) {
JSONObject object2 = privilege.getJSONObject(i);
YhhdBean yhhdList = new YhhdBean();
yhhdLists.add(yhhdList);
}
yhhdItem.setYhhdLists(yhhdLists);
homeItems.add(yhhdItem);
adapter = new HomeAdapter(getActivity(), homeItems);
lv_home_list.setAdapter(adapter);

layout:

    <ListView
android:id="@+id/lv_home_list"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:divider="@null"
android:overScrollMode="never"
android:scrollbars="none" />

Adapter:

public class HomeAdapter extends BaseAdapter {
private Context context;
private List<HomeItem> list;
private final static int JCHD = 3;
private final static int YHHD_LIST = 4; public HomeAdapter(Context context, List<HomeItem> list) {
this.context = context;
this.list = list;
} @Override
public int getCount() {
return list != null ? list.size() : 0;
} @Override
public Object getItem(int i) {
return list == null ? null : list.get(i);
} @Override
public long getItemId(int i) {
return i;
} @Override
public View getView(int i, View view, ViewGroup viewGroup) {
HomeItem homeItem = list.get(i);
LayoutInflater inflater = LayoutInflater.from(context);
YhhdHodlder yhhdHodlder;
YhhdListHolder yhhdListHolder;
int type = homeItem.getItemType().getValue();
switch (type) {
case JCHD:
if (view == null) {
view = inflater.inflate(R.layout.view_yhhd, null);
yhhdHodlder = new YhhdHodlder(context, view, "精彩");
view.setTag(yhhdHodlder);
} else {
yhhdHodlder = (YhhdHodlder) view.getTag();
}
break;
case YHHD_LIST:
if (view == null) {
view = inflater.inflate(R.layout.view_main_yhhd_list, null);
yhhdListHolder = new YhhdListHolder(context, view);
view.setTag(yhhdListHolder);
} else {
yhhdListHolder = (YhhdListHolder) view.getTag();
}
yhhdListHolder.initView(homeItem);
break;
}
return view;
} @Override
public int getItemViewType(int position) {
if (list != null && position < list.size()) {
return list.get(position).getItemType().getValue();
}
return super.getItemViewType(position);
} @Override
public int getViewTypeCount() {
return 2;
}
}
HomeItem:
public class HomeItem {
private ItemType itemType;
private List<YhhdBean> yhhdLists; public ItemType getItemType() {
return itemType;
} public void setItemType(ItemType itemType) {
this.itemType = itemType;
} public List<YhhdBean> getYhhdLists() {
return yhhdLists;
} public void setYhhdLists(List<YhhdBean> yhhdLists) {
this.yhhdLists = yhhdLists;
} }
ItemType:
public enum ItemType {

    JCHD(3),
YHHD_LIST(4); public int getValue() {
return value;
} private int value; ItemType(int value) {
this.value = value;
}
}

listView 多布局的更多相关文章

  1. Android ListView多布局

    使用listview多布局会出现一点问题: 由于多个item布局给单一的item布局是不一样的,使用起来,contentview的复用会出现问题. 避免出现问题的有这几个方法: 1.重写 getVie ...

  2. 2018-5-28-win10-uwp-动态修改ListView元素布局

    title author date CreateTime categories win10 uwp 动态修改ListView元素布局 lindexi 2018-05-28 15:15:54 +0800 ...

  3. Android中ListView错位布局实现(无聊向)

    由于某些原因,需要个错位的页面,在网上找不到好的例子,试着动手写了写. 不考虑配色的完成图如下: 首先考虑的是,listview每一行左右都有可能缩进. 先假设一行的布局就是ImageView,Tex ...

  4. 实现顶部轮播,下部listview经典布局的两种方式

    开头: 在做android开发的时候,我们经常会遇到这样的布局,上面是一个图片轮播图,下面是一些列表的项目.很多新闻app,视频类app都采用这样的布局.起初的时候 由于没有很多参考,我自己想到了一种 ...

  5. RemoteViews嵌入ListView复杂布局

    from http://blog.csdn.net/liliang497/article/details/8308313 主要函数 public void setRemoteAdapter (int ...

  6. Android ListView多布局讲解

    Listview优化是一个老生常谈的事情了,其优化的方面也有很多种,例如,布局重用.在getView()中减少逻辑计算.减少在页面滑动的时候加在图片,而是在页面停止滚动的时候再加在图片.而今天要介绍的 ...

  7. Android修行之路------ListView自定义布局

    主布局 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android= ...

  8. flutter控件之ListView滚动布局

    ListView即滚动列表控件,能将子控件组成可滚动的列表.当你需要排列的子控件超出容器大小,就需要用到滚动块. import 'package:flutter/material.dart'; cla ...

  9. jquery.mobile 中 collapsible-set collapsible listview 共同布局问题

    最近项目用上了jquery.mobile这货,在手机上做点简单的显示.之前只知道有这个框架,没把玩过. 特别是事件绑定方面,相比桌面系统下浏览器用着各种不爽,不得要领. 如下图,在做后台系统时,一般左 ...

  10. Listview多种布局的使用

    ListView中有两个可以用来让ListView可以在视图中显示多种布局的方法,分别是getItemType和getViewTypeCount 其中 getItemViewType返回的是有参数po ...

随机推荐

  1. python解释器的下载与安装

    python解释器 1. 什么是python解释器 用一种能让电脑听的懂得语言,使得电脑可以听从人们的指令去进行工作(翻译官) Python解释器本身也是个程序, 它是解释执行Python代码的,所以 ...

  2. scrapy 的response 的相关属性

    Scrapy中response介绍.属性以及内容提取   解析response parse()方法的参数 response 是start_urls里面的链接爬取后的结果.所以在parse()方法中,我 ...

  3. cpu内核态与用户态

    1.操作系统需要两种CPU状态 内核态(Kernel Mode):运行操作系统程序,操作硬件 用户态(User Mode):运行用户程序 2.指令划分 特权指令:只能由操作系统使用.用户程序不能使用的 ...

  4. git rebase 合并提交

    git rebase 合并提交 合并最近多次提交记录 语法 git rebase -i HEAD~n 1.进入合并模式 合并最近三次提交 git rebase -i HEAD~3 然后你会看到一个像下 ...

  5. dart系列之:创建Library package

    目录 简介 Library package的结构 导入library 条件导入和导出library 添加其他有效的文件 library的文档 发布到pub.dev 总结 简介 在dart系统中,有pu ...

  6. Windows操作系统安全加固基线检测脚本

    一.背景信息 在我们的安全运维工作中经常需要进行安全基线配置和检查,所谓的安全基线配置就是系统的最基础的安全配置,安全基线检查涉及操作系统.中间件.数据库.甚至是交换机等网络基础设备的检查,面对如此繁 ...

  7. 行星万象表白墙微信小程序、社交微信小程序,后台完整,支持多区域运营,扫码体验。

    简介 中国目前大概有5000个表白墙,累计用户近3000万,是一个庞大的群体,但现在大都以微信朋友圈为基础进行信息中转,但是这种模式经营者和用户都不友好,尤其是经营者无法变现,用户无法公开评论,这些种 ...

  8. vue-if和show

    <template> <div> <div v-if="flag">今晚要上课</div> <div v-else> 今 ...

  9. radio两行每行只能选择一个的解决方案!

    如图,我要做到这个效果,竖着每行只能有一个最像,和最不像,点击左边禁用右边 <div v-else> <div v-if="progress<quiz.length& ...

  10. Java异常与错误

    Java错误与异常 三种类型的异常 检查性异常:用户错误或问题引起的异常,这是程序员无法预见的.例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单的忽略 运行时异常:运行时异常是 ...