`

Android上面TreeView效果

阅读更多

 应该说很多的操作系统上面都提供了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中TreeView运用实例源码可运行,Android studio版本

    在Android开发中,TreeView是一种可定制化的控件,它允许我们以树形结构展示数据,类似于桌面操作系统中的文件系统视图。本实例源码是基于Android Studio的一个项目,旨在帮助开发者理解和实现TreeView在Android应用...

    Android-TreeView具有高性能和丰富功能的Android树形视图

    在Android应用开发中,UI设计是至关重要的,而树形视图(TreeView)是一种常见的数据结构展示方式,尤其适用于层次关系复杂的数据展示。本篇将深入探讨“Android-TreeView”库,一个专为Android设计的高性能、功能...

    android stutio treeview Demo

    在给定的“android stutio treeview Demo”项目中,我们关注的重点是如何利用TreeView控件创建一个三层树型结构。下面将详细解释这个知识点。 1. **TreeView控件**: TreeView是Android中用于展示层次化数据的控件...

    Android-AndroidTreeView用于以树结构显示数据

    `AndroidTreeView`是一个开源项目,它允许开发者轻松地在Android应用中实现树形视图,提供了丰富的定制选项和良好的用户体验。 `AndroidTreeView`的主要功能包括: 1. **动态加载**:可以处理大量数据,通过懒加载...

    Android TreeView

    在Android开发中,为了呈现层次化的数据,开发者有时会需要实现类似于Windows操作系统的TreeView效果。TreeView是一种用户界面组件,它可以展示具有多级结构的数据,让用户能够以折叠/展开的方式查看和交互。在...

    android TreeView整理版

    在Android开发中,TreeView是一种可用来展示层次结构数据的视图组件,类似于常见的文件系统目录结构。虽然Android SDK并未直接提供TreeView,但开发者通常通过自定义控件或者使用第三方库来实现这一功能。本整理版将...

    AndroidTreeView

    4. **动画效果**:在展开和折叠节点时,AndroidTreeView支持动画效果,使用户体验更加流畅。开发者可以通过配置动画时长和类型来调整视觉效果。 5. **数据绑定**:可以与各种数据模型绑定,如ArrayList、List或者...

    Android_TreeView

    实现方式 用两个树形节点类集合分别去存储所有节点(List<TreeElement> treeElements) 和当前显示节点(List<TreeElement> currentElements),当前显示节点集合 currentElements中的数据显示在ListView中。...

    eclipse版AndroidTreeView

    【描述】"原来是githup上面的项目,转成eclipse上面运行" 表明该资源来源于GitHub,原始版本可能适用于Android Studio,但通过开发者或社区的努力,已将其转换为适应Eclipse IDE的格式。这对于那些还在使用Eclipse...

    android treeView实现资源文件

    在Android开发中,`TreeView`是一种常见的数据展示控件,尤其适用于层次结构的数据。虽然Android SDK本身并未提供原生的`TreeView`,但开发者通常会通过自定义`ListView`或`RecyclerView`来模拟实现。本教程将深入...

    android超简单treeView,多级列表

    在Android开发中,`TreeView`通常用于展示具有层级关系的数据,比如文件系统、组织结构等。虽然Android SDK本身并未提供内置的`TreeView`组件,但开发者可以通过自定义控件或者第三方库来实现这一功能。本示例中的...

    eclipse版本androidTreeView

    【标题】:Eclipse版本AndroidTreeView详解 在Android开发中,ListView、RecyclerView等控件是常用的展示数据列表的组件,但它们在展示层次结构的数据时可能会显得力不从心。这时,我们可以借助第三方库来实现树形...

    Android TreeView 树形结构

    在Android开发中,`TreeView`是一种常见的用户界面组件,它以树形结构展示数据,使得层级关系清晰,便于用户浏览和操作。虽然Android SDK并没有直接提供内置的`TreeView`控件,但开发者可以通过第三方库或者自定义...

    Android(安卓) treeview多层级列表树

    在Android开发中,`TreeView`是一种常见的用于展示多层级数据的控件,它能够以树状结构显示数据,用户可以通过展开或折叠节点来查看不同层级的信息。`ListView`虽然广泛用于展示单一列表,但并不适合处理层级关系...

    android中treeview的实例运用,可运行demo

    在Android开发中,TreeView是一种可用来展示层次结构数据的视图控件,它将复杂的层级关系以树状的形式展现,方便用户浏览和操作。在实际应用中,TreeView常用于文件系统、目录结构或者菜单的展示。这篇教程将详细...

    expandlistview多层展开Android-TreeView-原版

    本项目"expandlistview多层展开Android-TreeView-原版"旨在实现多层展开的功能,通过嵌套`ExpandableListView`来达到这一目标。 `ExpandableListView`是Android SDK提供的一种可扩展的列表视图,它不仅支持单个条目...

    jquery实现的一个treeview效果

    而jQuery的TreeView插件则是用于创建可交互的树形视图,这在展示层级结构数据或者构建导航菜单时十分实用。下面我们将深入探讨jQuery Treeview的基本概念、实现原理以及使用方法。 首先,jQuery Treeview是一个插件...

    android自定义Treeview实现三级菜单

    在Android中,我们通常通过`ExpandableListView`或`RecyclerView`配合自定义适配器来模拟`TreeView`的效果。 1. **创建数据模型** 在实现`TreeView`之前,需要先定义数据结构。对于三级菜单,我们可以创建三个类:...

Global site tag (gtag.js) - Google Analytics