最近在开发项目中遇到了实现类似淘宝首页的需求,使用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. Burp Suite Pro 2021.10 Full (macOS, Linux) -- 查找、发现和利用漏洞

    申明:底层组件来自网络论坛或开源社区的分享,本站所有软件免费分享,仅供学习和测试使用,严禁用于任何商业用途!!! 请访问原文链接:https://sysin.cn/blog/burp-suite-pr ...

  2. java核心技术 第3章 java基本程序设计结构

    类名规范:以大写字母开头的名词 若由多个单词组成 每个单词的第一个字母应大写(驼峰命名法)  与.java文件名相同 运行程序:java ClassName(dos命令) 打印语句:System.ou ...

  3. win10+MX350显卡+CUDA10.2+PyTorch 安装过程记录 深度学习环境配置

    https://blog.csdn.net/m0_37867091/article/details/105788637

  4. 计算机网络漫谈之IP数据包

    网络层从 网络层 .IP与子网掩码 前前后后我们也说了两次了,IP 这个东西絮絮叨叨的也一直在提.今天我们来解开IP协议的面纱,还记得我们之前在数据链路层说的物理帧的结构吗?就是这样: 其中Head叫 ...

  5. robot_framewok自动化测试--(3)测试项目与测试套件的概念

    测试项目与测试套件的概念 如果你查看当前所创建的项目会发现,"test_project"是一个目录: "test_suit"则是一个 txt 文件: " ...

  6. js 事件流和事件冒泡阻止

    js 事件流和事件冒泡阻止 事件流 当浏览器发展到第四代的时候(IE4与Netscape4)浏览器开发团队遇到一个有意思的的问题: 页面的哪一部分会拥有某个特定的事件? 比如在纸上画上一组同心圆,如果 ...

  7. PHP、TP6框架及JavaScript的单步调试

    目录 一.PHP程序的调试 1. 单个PHP程序的调试 2. PHP框架代码的调试 二.JavaScript程序的调试 三.总结 参考资料:https://www.bilibili.com/video ...

  8. UDP端口检查告警SHELL脚本(企业微信版机器人版)

    脚本准备 0Batch_Check.sh 1port_check.sh 2wechat_bot_alert.sh CheckList CheckList #支持大/小写 10.1.1.5 Udp 53 ...

  9. python实现模糊操作

    目录: (一)模糊或平滑与滤波的介绍 (二)均值模糊 (1) 原理 (2)代码实现-----均值模糊函数blur() (三)中值模糊------mediaBlur函数 (四)高斯模糊------Gau ...

  10. [luogu5666]树的重心

    考虑枚举一个点k,求其为重心的方案数暴力的做法是,将其作为根搜索,设最大子树大小为s1,次大为s2,对割掉的子树分类讨论:1.在子树中,分两种情况(都可以用线段树合并来做) (1)从s1中切掉一棵大小 ...