简单记录,多级列表的实现。
来源:互联网 发布:想做淘宝客服怎么找 编辑:程序博客网 时间:2024/04/30 12:45
有时需要一个多级列表结构来显示内容,google只提供了listview 单级列表和ExpandableListView二级列表(我所知),基于这些自己修改,可以实现简单的多级列表。
刚写的小demo,还很不完善基于listview来实现多级列表(参考了网上的思路,也有用ExpandableListView)。
layout只是简单的listview的layout。
一个属性类
class Connection {boolean hasChild = false;// 是否有子节点int level = 0;// 级别,左缩进,0为最高级long id = -1;// 标识 -1为errboolean isExpansion = false;// 展开状态}
每个item拥有如上属性来判断他的显示内容和ui状态。
根据此属性,在adapter中的getview方法中实现显示(没有添加view不为空时的判断,效率低)。
public View getView(int position, View convertView, ViewGroup parent) {LayoutInflater inflater = LayoutInflater.from(mContext);View v = inflater.inflate(R.layout.company_list, null);Connection c = mConnections.get(position);v.setTag(R.id.company_list_image, c.level);v.setTag(R.id.company_list_text, position);v.setTag(R.id.companys_list, c);TextView text = (TextView) v.findViewById(R.id.company_list_text);text.setText(c.id + "");ImageView image = (ImageView) v.findViewById(R.id.company_list_image);v.setPadding(c.level * v.getPaddingLeft()*mLeftScan, 0, 0, 0);if (!c.hasChild) {image.setVisibility(View.INVISIBLE);} else {image.setVisibility(View.VISIBLE);if (c.isExpansion) {image.setImageResource(R.drawable.arrow_right);}else {image.setImageResource(R.drawable.arrow_bottom);}}return v;}此时,如果已经预先设置了一些值,这个多级列表已经可以正确显示。最后还缺少监听控制。
OnItemClickListener itemClickListener = new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {ArrayList<Connection> connections = mAdapter.getConnections();ArrayList<Connection> mConnections2 = new ArrayList<Connection>();Connection c = (Connection) arg1.getTag(R.id.companys_list);if (c == null) {return;}if (c.hasChild) {int level = c.level;int pos = connections.indexOf(c);boolean isCheck = true;if (c.isExpansion) {// 收缩c.isExpansion = false;for (int i = 0; i < connections.size(); i++) {if (isCheck) {if (i > pos && connections.get(i).level > level) {continue;}}if (i > pos) {isCheck = false;}mConnections2.add(connections.get(i));}} else {// 展开c.isExpansion = true;ArrayList<Connection> c2 = new ArrayList<Connection>();int pos2 = (mConnections.indexOf(c) + 1);int level2 = -1;for (int i = pos2; i < mConnections.size(); i++) {if (mConnections.get(i).level > level) {c2.add(mConnections.get(i));if (!mConnections.get(i).isExpansion) {level2 = mConnections.get(i).level;for (int j = (i + 1); j < mConnections.size(); j++) {if (mConnections.get(j).level > level2) {i++;} else {break;}}}} else {break;}}for (int j = 0; j < connections.size(); j++) {mConnections2.add(connections.get(j));if (j == pos) {for (int i = 0; i < c2.size(); i++) {mConnections2.add(c2.get(i));}}}}mAdapter.setConnections(mConnections2);mAdapter.notifyDataSetInvalidated();} else {}}};
计算部分很混乱,只是个小demo就先这样。
最好封装为一个view(监听和adapter都写里面)这样使用的时候直接把文件copy过来设值、调用就行了。
粗糙的效果图
- 简单记录,多级列表的实现。
- ionic入门教程第十三课-多级分类列表的简单实现
- ionic入门教程第十三课-多级分类列表的简单实现
- QQ 多级列表的实现
- 安卓多级列表简单实现
- android--多级下拉列表菜单的实现
- 实现word的多级列表功能
- 地区多级列表实现
- 适配器的多级列表
- 多级菜单 简单实现
- 定义新的多级列表
- 多级列表的学习:ExpandableListView
- ExpandableListView的使用多级列表
- 用JavaScript实现一个最简单的多级树
- 多级联动下拉列表Ajax方案实现
- Android 仿QQ多级列表框实现
- Android UI 之实现多级列表TreeView
- Android设计实现多级列表控件
- 返回值为引用或指针的成员函数加const要注意
- 系统调用跟我学
- 如何在SQL2005中循环添加列
- 【系统收藏】硬盘故障有哪些征兆
- 第九章 关系映射 多对多关联映射
- 简单记录,多级列表的实现。
- MyEclipse启动报错解决 exit code
- 屌丝高考五周年纪念日第一篇
- SQL 中 判断 表 或 临时表 是否 存在
- C语言学习记录
- View的getDrawingCache为空,解决办法
- windows platformsdk 和 VS
- 互斥锁防止程序被多次打开
- 【如何打开win xp系统超级管理员权限_xitongshoucang.com】