TreeView控件用来显示信息的分级视图,如同Windows里的资源管理器的目录。TreeView控件中的各项信息都有一个与之相关的Node对象。TreeView显示Node对象的分层目录结构,每个Node对象均由一个Label对象和其相关的位图组成。在建立TreeView控件后,我们可以展开和折叠、显示或隐藏其中的节点。TreeView控件一般用来显示文件和目录结构、文档中的类层次、索引中的层次和其他具有分层目录结构的信息。
思路是:按照类似于“树”的结构组织数据,界面上直接利用大家经常用的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()。
明白了这个思路,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.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;
}
分享到:
相关推荐
通过以上内容,我们可以了解到在Android Studio中利用TreeView控件创建三层树型结构的基本原理和实现方法。实际操作中,开发者还需要根据具体需求进行调整和优化,以满足应用的功能和性能要求。
"Android-TreeView"库是由SimonVT提供,它允许开发者轻松地在Android应用中实现自定义的树形视图,具有高度的可定制性和良好的性能表现。与原生的ListView或RecyclerView相比,TreeView对于展现层级关系的数据有着...
在Android开发中,为了呈现层次化的数据,开发者有时会需要实现类似于Windows操作系统的TreeView效果。TreeView是一种用户界面组件,它可以展示具有多级结构的数据,让用户能够以折叠/展开的方式查看和交互。在...
在Android开发中,TreeView是一种可用来展示层次结构数据的视图组件,类似于常见的文件系统目录结构。虽然Android SDK并未直接提供TreeView,但开发者通常通过自定义控件或者使用第三方库来实现这一功能。本整理版将...
`AndroidTreeView`是一个开源项目,它允许开发者轻松地在Android应用中实现树形视图,提供了丰富的定制选项和良好的用户体验。 `AndroidTreeView`的主要功能包括: 1. **动态加载**:可以处理大量数据,通过懒加载...
【AndroidTreeView】是一个在Android平台上实现的自定义树形视图库。这个开源项目源自GitHub,旨在提供一种灵活、可定制的方式来展示层次结构的数据,类似于桌面操作系统中的文件系统视图。开发者可以利用这个库轻松...
通过这个移植后的"Eclipse版AndroidTreeView",开发者可以在Eclipse环境中享受到与Android Studio相同的树形视图功能,实现高效且美观的界面设计,这对于那些尚未升级到Android Studio或者对Eclipse有特殊偏好的...
在Android中,我们通常通过`ExpandableListView`或`RecyclerView`配合自定义适配器来模拟`TreeView`的效果。 1. **创建数据模型** 在实现`TreeView`之前,需要先定义数据结构。对于三级菜单,我们可以创建三个类:...
- `TreeView`并不是Android SDK中的原生组件,因此通常需要自定义布局管理器来实现多层级的布局。可以使用`LinearLayout`、`RelativeLayout`或者`RecyclerView`作为基础,通过设置嵌套的布局来达到类似的效果。 7....
在本项目中,我们探讨的是如何使用`Qt`库自行实现一个具备单选和多选功能的`TreeView`,并且带有复选框(checkbox)功能。`Qt`是一个强大的跨平台应用开发框架,主要由C++编写,广泛应用于Windows、Linux、Mac OS等...
总结起来,实现Android的RecyclerView多层级TreeView需要对Android的UI组件、数据绑定和事件处理有深入理解。通过自定义Adapter和ViewHolder,我们可以构建一个灵活的视图,展示树形数据结构,提供良好的用户交互...
在项目"Android-TreeView-原版"中,可能采用了更高级的实现方式,即`TreeView`。`TreeView`是对`ExpandableListView`的一个增强,它提供了更灵活的布局选项和更好的性能。`TreeView`可能包含自定义的视图和递归的树...
在给定的"android 多级列表treeView"项目中,我们关注的是一个名为`TreeRecyclerView`的实现,它将树形结构与常见的RecyclerView控件相结合,提供了高效的性能和灵活的定制能力。 1. **RecyclerView基础** ...
本资源"安卓树形控件相关-用treeview实现树形列表可实现多级扩展.rar"提供了使用TreeView实现的树形列表示例,尽管可能并未涵盖所有情况,但对开发者来说,这是一个很好的起点,可以用来理解如何在Android应用中构建...
本文将详细介绍如何使用ListView组件来轻松实现Android中的多级树形组件。 首先,理解基本概念。ListView是Android提供的一个列表视图控件,它可以展示一列可滚动的项目列表。在多级树目录的实现中,每个树节点可以...
在`DragEnter`事件中,设置允许的拖放效果;在`DragDrop`事件中,执行实际的节点移动操作。例如: ```csharp private void treeView1_DragEnter(object sender, DragEventArgs e) { if (e.Data.GetDataPresent...
在Android开发中,`TreeView`通常用于展示层级结构的数据,比如文件系统或者组织结构。虽然Android SDK本身并未提供原生的TreeView组件,但开发者可以通过自定义控件或第三方库来实现这一功能。在这个例子中,我们...
本文实例讲述了Android TreeView效果实现方法。分享给大家供大家参考,具体如下: 应该说很多的操作系统上面都提供了TreeView空间,实现树形结构,这个树形结构的应用时很广泛的,而Google开发Android的时候出于...