listview布局(listview怎么建立子布局)

http://www.itjxue.com  2023-02-18 22:17  来源:未知  点击次数: 

如何让listview在布局中最多显示3个item

第一步:

创建多个item布局:

我们要处理列表载多个item就要创建多个item布局, 不同的item布局就代表一个类型,因此可以根据具体情况而创建具体的item布局。

第二步:

实现类MoreItemAdapter继承BaseAdapter:

我们在类MoreItemAdapter里面初始化了多个item标识常量,并在MoreItemAdapter的带参构造方法中传递item类型数据。

第三步:

重写getViewTypeCount()和 getItemViewType(int position)方法:

getViewTypeCount()为返回类型的个数 ,getItemViewType处理类型并返回一个int类型的标识。(注:必须重写,否则处理item类型时会出现空指针异常)

第四步:

重写getView()方法:

在这里方法通过getItemViewType(position)方法处理加载item布局并初始化不同item里的控件,并运用ViewHolder机制来进行复用item项。

第五步:

显示数据:

处理完item布局之后同样根据getItemViewType(position)方法来显示不同item类型的数据。这里可以if语句判断也可以用switch分支语句。

第六步

设置数据:

在MainActivity中实例化列表控件、实例化MoreItemAdapter适配器并设置item类型数据,设置适配器adapter。这里就完成了处理列表加载多个不同item的问题。

找不到好的代加工厂?看这里!实力厂家,可按需定制!

精选推荐

广告

详解ListView中多种item的实现方式

2下载·0评论

2021年1月20日

listview支持多种item显示处理

341阅读·0评论·1点赞

2016年9月2日

005-Android-UI进阶习题

1233阅读·0评论·1点赞

2021年4月10日

android 一个页面内 多个listview的实现

1.5W阅读·11评论·0点赞

2012年10月18日

android listview 选择多个item,Android ListView存在多个item样式的处理方法

173阅读·0评论·0点赞

2021年5月28日

使用listview时,每一页只显示一条数据

196阅读·0评论·0点赞

2022年4月21日

狂暴之翼手游

精选推荐

广告

ListView与条目显示问题解决

135阅读·0评论·0点赞

2013年6月14日

ListView一行显示两个Item并实现单选功能

6824阅读·1评论·5点赞

2017年7月18日

listView 多条目展示

2754阅读·0评论·0点赞

2016年10月25日

Android开发-listview实现多条目展示

1034阅读·0评论·2点赞

2018年12月12日

Android--------ListView多条目展示数据

2648阅读·0评论·2点赞

2017年6月8日

ListView多条目的展示

375阅读·0评论·0点赞

2017年7月25日

Android之ListView展示多类型的条目

2767阅读·0评论·1点赞

2016年8月14日

ListView展示不同类型条目的实现方法

3474阅读·0评论·0点赞

2014年12月28日

ListView多条目完美复用

38下载·4评论

2013年9月12日

listview多条目适配器

3下载·0评论

2017年12月10日

ListView多条目展示

7下载·0评论

2017年5月1日

复杂的ListView,多条目加载

1527阅读·0评论·0点赞

2016年11月23日

去首页

看看更多热门内容

android如何在listview里给每个条目设置布局?

可以为listview设置自定义的Adapter,该自定义Adapter继承BaseAdapter

class?MyAdapter?extends?BaseAdapter?{

????????@Override

????????public?int?getCount()?{

????????????//?TODO?Auto-generated?method?stub

????????????return?list!=null?list.size():0;

????????}

????????@Override

????????public?Object?getItem(int?position)?{

????????????//?TODO?Auto-generated?method?stub

????????????return?list.get(position);

????????}

????????@Override

????????public?long?getItemId(int?position)?{

????????????//?TODO?Auto-generated?method?stub

????????????return?position;

????????}

????????@Override

????????public?View?getView(int?position,?View?convertView,?ViewGroup?parent)?{

????????????//?TODO?Auto-generated?method?stub

????????????View?v?=?getLayoutInflater().inflate(R.layout.data_list,?null);

????????????

????????????TextView?name?=?(TextView)?v.findViewById(R.id.name);

????????????name.setText((String)?list.get(position).get("name"));

????????????

????????????return?v;

????????????}

}

其中getView方法可以通过getLayoutInflater().inflate()方法为每个条目设置不同的布局。

android中listView怎么复用多种布局

adapter填充数据的时候,我们一般要实现以下方法:

1 public int getCount(){ }

2 public Object getItem(int position) {}

3 public long getItemId(int position) {}

4 public View getView(int position, View view, ViewGroup viewGroup){}

但是要实现复用多种布局的话我们还要实现下面2个方法

1 public int getItemViewType(int position) {}

返回我们要复用的布局类型,假如我们要复用一个tab结构和item结构,我们可以这么来写

类别的数值在(0,类别总数-1)之间

public static final int TYPE_UNKNOW = 0;

public static final int TYPE_TAB = 1;

public static final int TYPE_LIST_ITEM = 2;

public static final int TYPE_MAX_COUNT = 3;

@Override

public int getItemViewType(int position) {

//复用tab结构

if (position == 1) {

return TYPE_TAB;

}

//复用一般的item结构

int size = CollectionUtils.size(feedDataList);

if (position = 1 size 0 position (size + 2)) {

return TYPE_LIST_ITEM;

}

return TYPE_UNKNOW;

}

类别总数是3,类别对应的int值应该在0 - 2 之间,它们分别是

public static final int TYPE_UNKNOW = 0;

public static final int TYPE_TAB = 1;

public static final int TYPE_LIST_ITEM = 2;

2 public int getViewTypeCount() { } 返回复用布局的总数,这里是3

@Override

public int getViewTypeCount() {

return TYPE_MAX_COUNT;

}

在adapter中的getView方法中,我们就可以这样来写:

@Override

public View getView(int position, View convertView, ViewGroup viewGroup) {

ItemViewHolder itemViewHolder;

TabViewHolder tabViewHolder;

int viewType= getItemViewType(position);

switch (viewType) {

case TYPE_TAB:

if(convertView == null ) {

tabViewHolder = new TabViewHolder(mContext);

//给contenView赋值,并给viewHolder设置tag

tabViewHolder.findView(position,convertView,viewGroup);

}else{

//直接复用

tabViewHolder = (TabViewHolder)convertView.getTag();

}

//这里是处理业务逻辑的方法

tabViewHolder.setView(position);

return tabViewHolder.layout;//返回convertView

case TYPE_LIST_ITEM:

if (convertView == null) {

itemViewHolder = new ItemViewHolder(mContext);

//给contenView赋值,并给viewHolder设置tag

itemViewHolder.findView(position, convertView, viewGroup);

} else {

//convertView不为空,直接复用

itemViewHolder = (ItemViewHolder) convertView.getTag();

}

//处理业务逻辑

itemViewHolder.setView((FeedComment)getItem(position));

return itemViewHolder.layout;//返回convertView

case TYPE_UNKNOW:

return null;

}

return null;

}

说明:处理复用多个布局的时候,如果不调用上面getViewTypeCount()和getItemType(),很容易就出现viewHolder类型转换错误。因为在屏幕滚动的时候,view.getTag()返回的viewHolder有2种,我们拿到的viewHolder可能就不是理想中的viewHolder,这个时候类型转换错误就出现了。

(责任编辑:IT教学网)

更多

推荐Flash动画制作教程文章