listView 多布局
最近在开发项目中遇到了实现类似淘宝首页的需求,使用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 多布局的更多相关文章
- Android ListView多布局
使用listview多布局会出现一点问题: 由于多个item布局给单一的item布局是不一样的,使用起来,contentview的复用会出现问题. 避免出现问题的有这几个方法: 1.重写 getVie ...
- 2018-5-28-win10-uwp-动态修改ListView元素布局
title author date CreateTime categories win10 uwp 动态修改ListView元素布局 lindexi 2018-05-28 15:15:54 +0800 ...
- Android中ListView错位布局实现(无聊向)
由于某些原因,需要个错位的页面,在网上找不到好的例子,试着动手写了写. 不考虑配色的完成图如下: 首先考虑的是,listview每一行左右都有可能缩进. 先假设一行的布局就是ImageView,Tex ...
- 实现顶部轮播,下部listview经典布局的两种方式
开头: 在做android开发的时候,我们经常会遇到这样的布局,上面是一个图片轮播图,下面是一些列表的项目.很多新闻app,视频类app都采用这样的布局.起初的时候 由于没有很多参考,我自己想到了一种 ...
- RemoteViews嵌入ListView复杂布局
from http://blog.csdn.net/liliang497/article/details/8308313 主要函数 public void setRemoteAdapter (int ...
- Android ListView多布局讲解
Listview优化是一个老生常谈的事情了,其优化的方面也有很多种,例如,布局重用.在getView()中减少逻辑计算.减少在页面滑动的时候加在图片,而是在页面停止滚动的时候再加在图片.而今天要介绍的 ...
- Android修行之路------ListView自定义布局
主布局 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android= ...
- flutter控件之ListView滚动布局
ListView即滚动列表控件,能将子控件组成可滚动的列表.当你需要排列的子控件超出容器大小,就需要用到滚动块. import 'package:flutter/material.dart'; cla ...
- jquery.mobile 中 collapsible-set collapsible listview 共同布局问题
最近项目用上了jquery.mobile这货,在手机上做点简单的显示.之前只知道有这个框架,没把玩过. 特别是事件绑定方面,相比桌面系统下浏览器用着各种不爽,不得要领. 如下图,在做后台系统时,一般左 ...
- Listview多种布局的使用
ListView中有两个可以用来让ListView可以在视图中显示多种布局的方法,分别是getItemType和getViewTypeCount 其中 getItemViewType返回的是有参数po ...
随机推荐
- C# StringBuilder和string
StringBuilder和string 1.string是引用类型还是值类型 MSDN官方说string是引用类型: 引用类型:引用分配栈内存,引用类型本身的数据存储在堆中: 值类型:在函数中创建, ...
- 六问六答理解ForkJoin原理
摘要:ForkJoin线程池是将任务分割为子任务,有可能子任务还是很大,还需要进一步拆解,最终得到足够小的任务. 本文分享自华为云社区<ForkJoin线程池的学习和思考>,作者:brea ...
- Django笔记&教程 3-2 模板语法介绍
Django 自学笔记兼学习教程第3章第2节--模板语法介绍 点击查看教程总目录 参考:https://docs.djangoproject.com/en/2.2/topics/templates/# ...
- Java安全之基于Tomcat的通用回显链
Java安全之基于Tomcat的通用回显链 写在前面 首先看这篇文还是建议简单了解下Tomcat中的一些概念,不然看起来会比较吃力.其次是回顾下反射中有关Field类的一些操作. * Field[] ...
- BootStrap中模态框踩坑
在模态框中使用html标签上的自定义属性来打开模态框后,在使用JS关闭模态框,就会出现多层蒙板问题 出现这个问题的原因就是没有仔细看bootstrap的官方文档,我人麻了,搞了好久 务必将模态框的 H ...
- C# 从 UTF-8 流中读取字符串的正确方法
我们下面的代码是从一个流 stream 中读取 UTF-8 编码的字符串.我们可以先考虑一下其中存在的潜在问题. string ReadString(Stream stream) { var sb = ...
- [ccKILLKTH]Killjee and k-th letter
建立后缀树(即反序插入字符串的parent树),然后可以发现按照dfs序排列满足其反串按字典序从小到大排列,那么就可以维护出每一刻子树的串长和,然后直接在dfs序上二分确定节点,再在节点内部乱搞即可求 ...
- arm中断汇编
IRQ_Handler: push {lr} /* 保存 lr 地址 */ push {r0-r3, r12} /* 保存 r0-r3,r12 寄存器 */ mrs r0, spsr /* 读取 sp ...
- C# 将Excel转为PDF时自定义表格纸张大小
通过后端程序将Excel表格转为PDF格式时,直接转换后的PDF效果可能出现表格页面过小或者过大,导致页面内容分布不均.要改善转换后的文档效果,只需在转换前自定义表格纸张大小,即可调整转换后的PDF页 ...
- [源码解析] PyTorch 分布式 Autograd (2) ---- RPC基础
[源码解析] PyTorch 分布式 Autograd (2) ---- RPC基础 目录 [源码解析] PyTorch 分布式 Autograd (2) ---- RPC基础 0x00 摘要 0x0 ...