- 浏览: 82881 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (56)
- Flex (10)
- Android SQLite (3)
- Android (16)
- ListView (1)
- Android 多线程 (1)
- Android Google Maps (1)
- Flex 基础 (1)
- Android ImageView (0)
- Android WebService (0)
- Android 杂项 (2)
- Android 主题与样式 (1)
- Android 数据库 (1)
- Android 短信 (2)
- Ubuntu 11.04 for 64 (2)
- SharedPreferences (2)
- manifest (1)
- 杂项 (9)
- Android 网络 (1)
最新评论
-
DUANLESINIAN:
楼主配置文件讲的不清不楚,应该是这样的:<applica ...
在任意位置获取应用程序Context -
andytang_bin:
我QQ 912180974
解决 Android 下载中文文件名问题 -
andytang_bin:
还是不行。 能Q上联系吗?!
解决 Android 下载中文文件名问题
应该说很多的操作系统上面都提供了TreeView空间,实现树形结构,这个树形结构的应用时很广泛的,而Google开发Android的时候出于Android手机是触摸屏幕的考虑,用手指操作树形结构很不方便,从这方面考虑没有提供TreeView的空间,而是只是提供了一个ExpandableListView:android中的二级树型Widget,虽然已经能满足不少的功能需求,例如书签的功能就可以使用这个控件,但是随着应用的不断增多这个就不能满足要求了,例如pdf中左侧的目录的功能,就需要树形结构来实现。下面的这个应用就是基于pdf左侧的目录结构为原型写的,那首先贴上效果图:
这个的思路是:按照类似于“树”的结构组织数据,界面上直接利用大家经常用的listview实现的。下面这个是节点信息的类:
public class PDFOutlineElement {
private String id;//当前节点的id
private String outlineTitle ;//节点上面显示的信息
private boolean mhasParent ; //是否有父节点
private boolean mhasChild ;//是否有孩子节点
private String parent;//父节点的id
private int level;//当前节点所在的层次
}
在这里我想解释一下这个level,是很关键的,他表示的是当前节点所在的层次,不要小看他,正是他帮助我们在界面上显示出来了层次效果,其实这个树形结构并不是树形结构,所有的数据都维护在一个ArrayList里面,某一个节点A下面有子节点B、C,其实A、B、C这三个节点在ArrayList里面是顺序存放的,如果A的层次是level,那个他的子节点的层次是level+1,我们在getView()的时候我们可以不借助系统自动给我们画上,而是可以自己指定他的位置holder.icon.setPadding(25 * (level + 1), holder.icon.getPaddingTop(), 0, holder.icon.getPaddingBottom());,这样他的子节点便具有了缩进的效果。
还有比较关键的点是如何实现“展开”和 “缩回”的效果,其实这个只不过 是当单击摸个节点的时候,如果这个节点下面有子节点而且是“缩回”的,就把他的所有的子节点都从那个ArrayList里面删除调,然后 notifyDataSetChanged(),同理就是“展开”的时候,就是在这个节点后面添加子节点到ArrayList里面,然后 notifyDataSetChanged()。
其实说到这里大家应该知道怎么做了,这个树形结构不是真树,而就是一个ListView,通过往ArryList里面添加删除数据控制信息,通过setPadding()实现缩进
明白了这个思路,我把getView解释一下,大家肯定能做出来
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.outline, null);
holder = new ViewHolder();
holder.text = (TextView) convertView.findViewById(R.id.text);
holder.icon = (ImageView) convertView.findViewById(R.id.icon);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
int level = mfilelist.get(position).getLevel();//每次根据节点的层次绘制显示的位置
holder.icon.setPadding(25 * (level + 1), holder.icon
.getPaddingTop(), 0, holder.icon.getPaddingBottom());
holder.icon.setVisibility(View.VISIBLE);
holder.text.setText(mfilelist.get(position).getOutlineTitle());
//如果有孩子而且当前是不是展开的图标设置为“+”号的图标
if (mfilelist.get(position).isMhasChild()
&& (mfilelist.get(position).isExpanded() == false)) {
holder.icon.setImageBitmap(mIconCollapse);
} else if (mfilelist.get(position).isMhasChild()
&& (mfilelist.get(position).isExpanded() == true)) {
//如果有孩子而且当前是不是展开的图标设置为“+”号的图标
holder.icon.setImageBitmap(mIconExpand);
} else if (!mfilelist.get(position).isMhasChild()){
holder.icon.setImageBitmap(mIconCollapse);
holder.icon.setVisibility(View.INVISIBLE);//这里不要设置为GONE,因为GONE不显示而且不占位置的,而INVISIBLE是不显示但是占位置的
}
return convertView;
}
下面是程序的源码下载地址:
http://download.csdn.net/source/3013850
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/GaoMatrix/archive/2011/02/08/6174915.aspx
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/GaoMatrix/archive/2011/02/08/6174915.aspx
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/GaoMatrix/archive/2011/02/08/6174915.aspx
发表评论
-
Android开发之ListView 适配器(Adapter)优化
2011-05-14 15:56 960ListView的Adapter的作用如下图所示: Adap ... -
Android软键盘学习InputMethodManager
2011-05-14 11:14 3950当我们在Android提供的EditText中单击的时候,会自 ... -
Android WakeLock
2011-05-12 22:50 1359在Android中,申请WakeLock可以让你的进程持续执行 ... -
Android中的Handler使用总结
2011-04-21 16:37 643在Android的UI开发中,我们经常会使用Handler来控 ... -
Android多线程及异步处理问题 【转载】
2011-04-17 23:53 19581、问题提出 1)为何需要多线程? 2)多线程如何实现? 3) ... -
EditText的属性说明
2011-04-14 11:47 857EditText的属性很多,这 ... -
Android 系统自带的图片
2011-04-14 11:43 1224This is a list of resources in ... -
Android Check GPS is Enabled or Not
2011-04-13 21:21 0在 Android 中, 我们可以使用 LocationMan ... -
Android ListView with Searchbox Sort items
2011-04-13 16:11 0这里我们有一个搜索框, 当它里面的内容与列表项匹配时... ... -
Android ListView Multiple Choice Example
2011-04-13 14:28 0在 Andoird 中 ListView 通常用来显示一个列表 ... -
TextView 不用 ScrollViewe 也可以滚动
2011-04-12 16:13 975具体步骤: 第一步: xml 文件 <Text ... -
Activity...
2011-04-10 17:03 1013一、常用类: 1. Activity 是最基本的类,它 ... -
Android2.1中的 drawable(hdpi,ldpi,mdpi) 的区别
2011-03-24 21:37 907在之前的版本中,只有一个drawable,而2.1版本中有dr ... -
ADB常用命令
2011-03-24 21:36 919ADB(Android Debug Bridge)是A ... -
在任意位置获取应用程序Context
2011-03-24 21:35 1646在 Android 程序中访问资源时需要提供 Cont ... -
如何控制Android不锁屏
2011-03-22 14:51 1988锁定屏幕对于移动终端来说是非常有必要的,但是对于机顶盒产品 ... -
android Toast大全(五种情形)建立属于你自己的Toast
2011-03-19 18:26 839Toast用于向用户显示一些帮助/提示。下面我做了5中效果, ... -
Android简单数据存储类SharedPreferences详解及实例(通过“记住密码”功能学习SharedPreferences)
2011-03-19 18:23 4057SharedPreferences是Android中存储简单数 ...
相关推荐
android TreeView整理版 android TreeView整理版
TreeView:具有高性能和丰富功能的Android树形视图
android stutio 三层树型结构 利用 treeview 控件绑定数据,初学分享。
在android中实现类似windows的treeview效果。
AndroidTreeView
实现方式 用两个树形节点类集合分别去存储所有节点(List<TreeElement> treeElements) 和当前显示节点(List<TreeElement> currentElements),当前显示节点集合 currentElements中的数据显示在ListView中。...
android的treeView,超简单,用于实现多级列表,实现当前只有一个一级列表展开,其他一级列表关闭,listView实现
android中TreeView运用实例源码可运行,Android studio版本
1. 原创代码 2. 基于listView的treeView显示,支持动态增加和删除
android treeview 树形结构
Android自定义TreeView三级菜单
用jquery实现的treeview效果,非常方便。
android中treeview的实例运用,可以直接运行,需要的可以拿去测试
Android(安卓) listview+自定义 treeview多层级列表树
Android TreeView用于以树结构显示数据
原来是githup上面的项目的 android studio,转成eclipse上面运行,并添加了长按方法 和在每个item上绑定值对象,类似listView每个item绑定一个值对象
android 多级列表。三级列表支持,效果非常赞,大家做多级列表的肯定有帮助。
treeViewControl js实现treeview效果