
Listview加载不同布局
获取各个item的type类型数量 在getView()方法中根据type决定使用哪种布局 根据type创建相应的view 根据需求设置各个布局的Visibility属性 在adapter中根据需求判断是否显示该布局
发布日期:2025-04-10 23:30:30
浏览次数:9
分类:精选文章
本文共 4161 字,大约阅读时间需要 13 分钟。
基于BaseAdapter的多布局adapter优化方案
在Android开发中,BaseAdapter作为一个通用的adapter框架,常用于实现多种item布局的需求。以下将详细阐述如何通过BaseAdapter实现多种item布局,并对两种常见布局进行详细分析。
方法分析
在设计adapter时,常见的实现方法有以下两种:
方法1.1.1:通过BaseAdapter的getViewTypeCount()获取Item种类数量,随后在getView()方法中根据不同的type设置不同的item布局
这种方法的优点在于维护相对简单,特别适用于布局较少的场景。其实现过程大致如下:
这种方法的缺点在于实现过程较为繁琐,特别是当需要频繁添加新的布局类型时,代码维护成本会显著增加。
方法1.1.2:根据需求设置布局的显示隐藏效果
这种方法的优势在于灵活性高,适用于需要动态控制布局显示隐藏效果的场景。实现步骤如下:
这种方法的缺点是维护相对麻烦,特别是当需要对多个布局进行设置时,代码复杂度会显著增加。
主页面布局方案
以下展示了主页面的布局设计,采用了RelativeLayout作为主要布局框架。
item布局方案
根据需求,可以设置两种不同的item布局:
布局1:仅包含文字
布局2:图片加文字
具体实现
以下将详细介绍adapter的实现过程,包括holder优化和view recycling的应用。
Holder优化
在Android中,使用Holder模式可以有效提升adapter的性能表现。以下展示了两种不同的Holder类:
public class Holder1 { TextView play_title;}public class Holder2 { TextView play_info; ImageView play_img;}
adapter实现
public class MyAdapter extends BaseAdapter { private LayoutInflater inflater; private static final int ITEM_TITLE = 0; private static final int ITEM_INTRODUCE = 1; public MyAdapter() { inflater = LayoutInflater.from(getApplicationContext()); } @Override public int getCount() { return bs.size(); } @Override public Object getItem(int position) { return bs.get(position); } @Override public int getItemViewType(int position) { return bs.get(position).getType(); } @Override public int getViewTypeCount() { return 2; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { int type = getItemViewType(position); Holder1 holder1 = null; Holder2 holder2 = null; if (convertView == null) { switch (type) { case ITEM_TITLE: convertView = inflater.inflate(R.layout.item_title, null); holder1 = new Holder1(); holder1.play_title = (TextView) convertView.findViewById(R.id.title); holder1.play_title.setText(bs.get(position).getName()); convertView.setTag(holder1); break; case ITEM_INTRODUCE: convertView = inflater.inflate(R.layout.item_children, null); holder2 = new Holder2(); holder2.play_info = (TextView) convertView.findViewById(R.id.info); holder2.play_img = (ImageView) convertView.findViewById(R.id.img); holder2.play_img.setBackgroundResource(bs.get(position).getImg()); holder2.play_info.setText(bs.get(position).getName()); convertView.setTag(holder2); break; } } else { switch (type) { case ITEM_TITLE: holder1 = (Holder1) convertView.getTag(); holder1.play_title.setText(bs.get(position).getName()); break; case ITEM_INTRODUCE: holder2 = (Holder2) convertView.getTag(); holder2.play_info.setText(bs.get(position).getName()); holder2.play_img.setBackgroundResource(bs.get(position).getImg()); break; } } return convertView; }}
数据类
以下展示了数据类的结构:
public class ItemB { private int img; private String name; private int type; public ItemB(int img, String name, int type) { this.img = img; this.name = name; this.type = type; } public int getImg() { return img; } public void setImg(int img) { this.img = img; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getType() { return type; } public void setType(int type) { this.type = type; }}
总结
通过以上方法,可以实现基于BaseAdapter的多布局adapter,有效满足不同需求。通过合理设置布局和Holder优化,可以显著提升adapter的性能表现。在实际开发中,建议根据具体需求选择合适的布局方案,并通过测试优化adapter的性能表现。
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2025年04月29日 23时47分49秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Linux防火墙-iptables
2023-02-05
linux防火墙iptables简单介绍
2023-02-05
Linux防火墙实现SNAT与DNAT
2023-02-05
Linux防火墙应用实践
2023-02-05
linux防火墙规则
2023-02-05
Linux静态库和共享库【转】
2023-02-05
Linux面试题总结
2023-02-05
Linux高手最常使用的五个快捷键,零基础入门到精通,收藏这一篇就够了
2023-02-05
linux高级技巧:heartbeat+lvs(二)
2023-02-05
linux高级数据存储
2023-02-05
Linux高阶知识:Linux 中的隐藏文件
2023-02-05
Linux(10):安装mysql5.7
2023-02-05
Linux(11):设置固定ip
2023-02-05
Linux(12):上传下载命令rz和sz
2023-02-05
Linux(13):压缩和解压缩命令
2023-02-05
Linux(14):端口的开放与管理
2023-02-05
Linux(1):文件和目录
2023-02-05
Linux(2):Linux命令概述
2023-02-05
Linux(3):Linux命令-文件管理
2023-02-05
Linux(4):Linux命令-用户、权限管理
2023-02-05