最近在开发项目中遇到了实现类似淘宝首页的需求,使用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. 使用google zxing生成二维码图片

    生成二维码工具类: 1 import java.awt.geom.AffineTransform; 2 import java.awt.image.AffineTransformOp; 3 impor ...

  2. HDC2021:HMS Core分析服务,数智化营销闭环方案帮助开发者实现精益增长

    10.22-10.24华为开发者大会2021(Together)在东莞如期举行.本次大会上,HMS Core华为分析服务作为多平台.跨设备的一站式数据分析平台以数据驱动业务智能决策为理念,带来了数智化 ...

  3. namaspace之pid namespace

    认识Namespace namespace 是 Linux 内核用来隔离内核资源的方式.通过 namespace 可以让一些进程只能看到与自己相关的一部分资源,而另外一些进程也只能看到与它们自己相关的 ...

  4. 攻防世界 WEB 高手进阶区 XCTF 4th-CyberEarth ics-06 Writeup

    攻防世界 WEB 高手进阶区 XCTF 4th-CyberEarth ics-06 Writeup 题目介绍 题目考点 掌握暴力破解手段 Writeup 打开链接 http://220.249.52. ...

  5. FastApi下载文件

    FastApi下载文件 记得之前我们讲过生成excel文件的事情,那么如何把服务器生成的excel文件正确发送给用户呢? 今天我们就来说说在FastApi中如何正确让用户下载到想要的文件. 基本流程 ...

  6. java框架面试高频问题(SpringMVC)

    1.SpringMVC是什么? 请说出你对它的理解? SpringMVC是Spring将Web层基于MVC封装后的框架. 在没有SpringMVC之前,Web层的Servlet负责的事情很多,很杂.  ...

  7. 物联网3D,物业基础设施3D运维,使用webgl(three.js)与物联网设备结合案例。搭建智慧楼宇,智慧园区,3D园区、3D物业设施,3D楼宇管理系统——第八课

    写在前面的废话: 很久没有更新文章了,这段时间一直忙于项目落地,虽然很忙,但是感觉没有总结,没有提炼的日子,总是让人感觉飘飘忽忽的. 所幸放下一些事,抽出一些时间,把近期的项目做一些整理与记录.也算是 ...

  8. [gym102769L]Lost Temple

    考虑第$i$列的答案,即找到一个区间$[l,r]$,使得: 1.$l$和$r$要同奇偶,令$ans=\frac{r-l}{2}$,要求尽量大($ans+1$即为该列答案) 2.$\forall 0\l ...

  9. [bzoj1416]神奇的口袋

    容易发现操作任意次并不会改变每一个点的概率(因为每一个点加d的概率相同,期望与原数成比例),然后直接输出即可(要用高精度) 1 #include<bits/stdc++.h> 2 usin ...

  10. 应用SpringAOP及Tlog工具完成日志链路追踪、收集、持久化

    一.痛点 目前我司各系统的日志管理比较原始,使用logback打日志到log文件,虽然有服务管理平台,但记录的日志也仅仅是前置机调用后台系统的出入参,当遇到问题时查日志较为麻烦. 登录VPN-打开服务 ...