自定义组件-BreadcrumbTreeView 的使用
| 一、问题概述 |
树形结构是开发中常用的一种组织数据的结构,不少平台也提供了对应的控件。而在android平台中,出于使用手指操作树形结构不是很方便的原因,并没有提供树形结构控件。但在实际应用中,不可避免的会遇到展示带有层级关系数据的情况,比如组织结构的展示、文件目录的展示等等。
基于这样的需求,本人参考网站中的面包屑导航和android中listview控件实现了如下效果的TreeView控件:


通过这种方式,既可以使用上面的面包屑导航部分导航到任意一个节点,又可以充分利用listview强大的数据展示功能,同时通过相应监听器进行节点数据的懒加载。具体使用步骤如下:
| 二、实现步骤 |
1、本组件支持任意实体对象,通过注解的方式将实体映射成组件中的节点。定义的文件夹实体对象:

public class FileFolder {
@TreeNodeID
private String folderId;
@TreeNodeName
private String folderName;
@TreeNodeParentID
private String parentFolder;
public FileFolder(String folderId, String folderName, String parentFolder) {
super();
this.folderId = folderId;
this.folderName = folderName;
this.parentFolder = parentFolder;
}
public FileFolder() {
super();
}
}

2、创建布局文件,注意要有listview

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content" > <com.jredu.view.BreadcrumbTreeView
android:id="@+id/myBreadcrumb"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<ListView
android:id="@+id/mylist"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/myBreadcrumb" />
</RelativeLayout>

3、为listview实现适配器组件,主要适配器要继承BreadcrumbTreeViewAdapter,在此适配器中将完成将实体转换为TreeNode节点。

public class FolderTreeAdapter extends BreadcrumbTreeViewAdapter<FileFolder> {
public FolderTreeAdapter(Context mContext, List<FileFolder> treeData) {
super(mContext, treeData);
}
@Override
public View getConvertView(TreeNode node, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
convertView = this.mLayoutInflater.inflate(R.layout.tree_list_item,
null);
holder = new ViewHolder();
holder.deptName = (TextView) convertView
.findViewById(R.id.treeNode);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.deptName.setText(node.getNodeName());
return convertView;
}
public class ViewHolder {
public TextView deptName;
}
}

4、在activity中为breadcrumbtreeview组件绑定OnTreeNodeClickListener监听器,当点击listview中item或者点击面包屑导航时都将执行此监听器。监听器中只有一个方法为onNodeClick,可以在此方法中加载子节点的数据。
public void onNodeClick(TreeNode node, int position, boolean isBreadcrumb)
第一个参数:被点击的节点
第二个参数:被点击节点的索引
第三个三处:被点击节点时listview中的还是面包屑中的节点。
通过以上步骤,即可使用BreadcrumbTreeView组件,本组件现在只是初步实现,尚有一些功能没有完成且没有进行优化,下一步将会继续完善修改。
自定义组件-BreadcrumbTreeView 的使用的更多相关文章
- Android开发之自定义组件和接口回调
说到自定义控件不得不提的就是接口回调,在Android开发中接口回调用的还是蛮多的.在这篇博客开始的时候呢,我想聊一下iOS的自定义控件.在iOS中自定义控件的思路是继承自UIView, 在UIVie ...
- Android自定义组件
[参考的原文地址] http://blog.csdn.net/l1028386804/article/details/47101387效果图: 实现方式: 一:自定义一个含有EditText和Butt ...
- 自己写的几个android自定义组件
http://www.see-source.com/androidwidget/list.html 多多指点,尤其是自定义组件的适配问题,希望能有更好的方法
- PhoneGap: Android 自定义组件
Hello Core Demo Plugin Development(组件部署): http://docs.phonegap.com/en/2.0.0/guide_plugin-development ...
- android开发之自定义组件
android开发之自定义组件 一:自定义组件: 我认为,自定义组件就是android给我们提供的的一个空白的可以编辑的图片,它帮助我们实现的我们想要的界面,也就是通过自定义组件我们可以把我们要登入的 ...
- HTML5 UI框架Kendo UI Web教程:创建自定义组件(三)
Kendo UI Web包 含数百个创建HTML5 web app的必备元素,包括UI组件.数据源.验证.一个MVVM框架.主题.模板等.在前面的2篇文章<HTML5 Web app开发工具Ke ...
- HTML5 UI框架Kendo UI Web中如何创建自定义组件(二)
在前面的文章<HTML5 UI框架Kendo UI Web自定义组件(一)>中,对在Kendo UI Web中如何创建自定义组件作出了一些基础讲解,下面将继续前面的内容. 使用一个数据源 ...
- HTML5 UI框架Kendo UI Web自定义组件(一)
Kendo UI Web包含数百个创建HTML5 web app的必备元素,包括UI组件.数据源.验证.一个MVVM框架.主题.模板等.在Kendo UI Web中如何创建自定义组件呢,在下面的文章中 ...
- 自定义组件之MoreListView
前言 本文针对自定义组件进行一些分析.还是那句老话“授之于鱼不如授之以渔”.今天要讲的是一个自定义的可以分页的ListView. 网上都讲了些ListView分页的方法,那么为什么我在这里还需要自己写 ...
随机推荐
- MQ的导出备份
参考链接: http://www.ibm.com/developerworks/cn/websphere/library/techarticles/1312_hub_mq/1312_hub_mq.ht ...
- Japanese Learning - Words and Sentences 1
1. いらっしゃいませ.何名さまですか. 二人です. タバコをお吸いになりますか. かしこまりました.少々お待ちください. お勘定お願いします. ご一緒でよろしいでしょうか. 別々にお願いします. 2 ...
- 以图像分割为例浅谈支持向量机(SVM)
1. 什么是支持向量机? 在机器学习中,分类问题是一种非常常见也非常重要的问题.常见的分类方法有决策树.聚类方法.贝叶斯分类等等.举一个常见的分类的例子.如下图1所示,在平面直角坐标系中,有一些点 ...
- docker~docker-compose和VS解决方案的关系
回到目录 一般地,我们在VS里添加了一个解决方案之后,会更新模块或者业务添加多个api,web项目,这类似于最近说的微服务,而我们的docker-compose与微软件正好有了一种默契,当你为你的解决 ...
- 新一代开源Android渠道包生成工具Walle
本文转自:http://tech.meituan.com/android-apk-v2-signature-scheme.html 新一代开源Android渠道包生成工具Walle 新的应用签名方案A ...
- Objectiv-C UIKit基础 NSLayoutConstraint的使用(VFL实现)
利用VFL可视化语言 (简单的抛砖引玉) 构建3个View 橙色和绿色左中右间隔20 上间隔40 高为200 蓝色在橙色内(0,0)处 宽高为橙色的一半 实现效果如下 由于atutosize和auto ...
- 【JAVASCRIPT】React学习- 与 flux 结合使用
摘要 react 学习包括几个部分: 文本渲染 JSX 语法 组件化思想 数据流 与flux 结合使用
- ServletAPI的获取
Action中获取ServletAPI,三种方式 (1)通过ActionContext获取(只是获取并操作了域空间,并不是真正的ServletAPI对象) 在struts2框架中,通过Action的执 ...
- iOS耗电量测试
iOS耗电量测试 本文主要介绍的是使用Energy Diagnostics Instruments来进行iOS耗电量测试. 一.使用方法: 1)iOS 设置选项 ->开发者选项 ->log ...
- 【干货】一篇文章学会Gulp(Getting started with Gulp)
抛开Grunt,又有一个新的自动化构建系统成为新的领跑者.那就是Gulp. Gulp是一种直观.自动化构建的工具. 为什么前端er会这么感兴趣Gulp?我相信大家都有个思想:要么不做事,要做事就要把事 ...