listview布局(listview怎么建立子布局)
如何让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,这个时候类型转换错误就出现了。