android 关于listview中不同item的布局

上次我写了一篇关于自定义的HorizontalScrollView和viewpager类似tab的滑动,截图下面有listview的不同的item布局,就是在getview方法里选择type类型。如图:,其实也挺简单的,我在这里只贴出重要的方法。

先定义个listview控件,一目了然这里要分为2部分。先写一个类实现Serializable接口,定义一个关于title的属性,和一个包裹里面的内容的集合,如:                                                                                                                        

1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
      
      
public class Huobi_Listview_Time implements Serializable{

private String title;
private List<Listview_Item> items;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public List<Listview_Item> getItems() {
return items;
}
public void setItems(List<Listview_Item> items) {
this.items = items;
}
@Override
public String toString() {
return "Listview_Time [title=" + title + ", items=" + items + "]";
}
}
当然,这只是头部实现了 Serializable接口,我们还要实现Listview_Item,这里面就是需要包裹的属性了,这个就需要你项目的属性了。这里就不展示了,就如上图类似。除此之外,我们还要增加一个关于类型的实例类,如图:

public class CategoryEntity {
	public static final int TITLE=0;
	public static final int ITEM=1;
	public Object item;
	public int type;
	public String section;
	
	public CategoryEntity(Object item,int type,String section) {
		this.item=item;
		this.type=type;
		this.section=section;
	}
	
	public Object getItem() {
		return item;
	}
	public void setItem(Object item) {
		this.item = item;
	}
	
	public int getType() {
		return type;
	}

	public void setType(int type) {
		this.type = type;
	}

	public String getSection() {
		return section;
	}
	public void setSection(String section) {
		this.section = section;
	}
}
做完过后,我们就需要在activity里创建2个集合 List<CategoryEntity> categoryItems = new ArrayList<CategoryEntity>(); List<Listview_Time> list; 第一个集合主要是用来判断的类型是0或1,第二个集合主要是装头部和身部的所有内容,把里面的数据都获取好后,把categoryItems 传递到adapter中,这里提出2个重要的方法,也是这种效果的关键之处:
/**
	 * 区分Head(头)和Body(体)的逻辑处理:此方法非常关键
	 */
	private void initCategoryItems(List<Huobi_Listview_Time> simulateData) {

		categoryItems.clear();

		for (int i = 0; i < simulateData.size(); i++) {
			Huobi_Listview_Time address = simulateData.get(i);

			// 当前的Head
			String currentTitle = address.getTitle();

			// 判断上一个Head:判断是否有上一个Head,如有有则用上一个Head,如果没有则用空表示;
			String lastTitle = (i - 1) >= 0 ? (simulateData.get(i - 1)
					.getTitle()) : " ";

			/**
			 * 通过对当前Head与上一个Head进行对比,如果不是同一个头,则添加进行存储
			 */
			if (!currentTitle.equals(lastTitle)) {
				CategoryEntity firstItem = new CategoryEntity(null,
						CategoryEntity.TITLE, currentTitle);
				categoryItems.add(firstItem);
			}

			/**
			 * 循环添加Head下面Body,添加完当前Head的Body则会进行下一轮的Head对比,不相等则再进行新的一轮的Body的添加。
			 * 以此类推
			 */
			List<Huobi_Listview_Item> items = address.getItems();
			for (Huobi_Listview_Item addressItem : items) {
				CategoryEntity item = new CategoryEntity(addressItem,
						CategoryEntity.ITEM, currentTitle);
				categoryItems.add(item);
			}
		}
	}
activity里把 categoryItems 数据 传递到adapter中。

adapter里,其他的方法都类似,主要是创建2个方法:

/**
	 * 获得视图的类型
	 */
	@Override
	public int getItemViewType(int position) {
		return ((CategoryEntity) getItem(position)).type;
	}
	/**
	 * 获得视图的类型数量
	 */
	@Override
	public int getViewTypeCount() {
		return 2;
	}
主要是在getview()里分别以int type = getItemViewType(position); //获取每一条CategoryItem数据CategoryEntity item = (CategoryEntity) getItem(position);来判断。再以switch( type){case CategoryEntity.TITLE:   。。。。break; case CategoryEntity.ITEM: 。。。。。break;}就这样,功能就能全部实现了。(句号表示处理的内容,分别加载头部和ITEM的容器组件,做相应的处理)。

以上就是实现Listview不同的Item加载布局,由于今天状态不好,写得比较杂乱,如有朋友遇到这类问题,可以直接联系我或留言,我会替大家解决的。qq:2037646179

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值