View on GitHub

Tree2View

🎄 Tree data structure to Android View

Tree2View

TreeView implementation in Android.

主要功能

Tree2View 文件管理器(一个例子)
①多级分层的树结构视图 基本的文件管理器布局
②记忆展开状态 自动展开上次打开未关闭的目录
③使用适配器设计模式,用户可自定义 TreeAdapter 对不同类型的文件显示不同的Icon
④动态增删节点 删除和添加文件后可自动刷新状态
⑤选择模式 长按节点进行文件操作(Copy, Cut, Rename, Delete)
⑥动画支持,内置增删节点的动画 增删文件时带有动画

一个更简单的例子

实现原理

效果预览 - Preview

下载

  1. 在项目的 build.gradle 中添加:
	allprojects {
		repositories {
			...
			maven { url 'https://jitpack.io' }
		}
	}
  1. 在 app 目录下的 build.gradle 添加:
	dependencies {
	        implementation 'com.github.LeeReindeer:Tree2View:v0.1.2'
	}

使用

  1. xml 中添加,和 ListView 类似的.
    <moe.leer.tree2view.TreeView
        android:id="@+id/tree_view"
        android:layout_marginTop="16dp"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:divider="#ffffff"
        android:dividerHeight="1px">

    </moe.leer.tree2view.TreeView>
  1. 在代码里添加初始化,这里使用Kotlin(Java 代码类似)
  var root :DefaultTreeNode? = DefaultTreeNode("Root")
  tree_view.root = root
  val child1 = DefaultTreeNode("Child1")
  val child2 = DefaultTreeNode("Child2")
  //在你创建节点之后,你需要立即添加她
  root.addChild(child1)
  root.addChild(child2)
  val child3 = DefaultTreeNode("Child3")
  child1.addChild(child3)
  //是否默认显示根节点的孩子
  tree_view.isRootVisible = true
  //默认的动画
  tree_view.isDefaultAnimation = true
  1. 设置监听器

Tree2View 有默认的点击监听器,你也可以自己实现,可以参考这里

选择(长按)监听器需要自己实现。

  1. 自定义使用

只需要实现 TreeAapater ,就那么简单。

public class FileTreeAdapter extends TreeAdapter<FileItem> {
  //resourceId 是 itemView 的 xml 视图。
  public FileTreeAdapter(Context context, DefaultTreeNode root, int resourceId) {
    super(context, root, resourceId);
  }
  
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
     //your code here
     //...
     //调用 setPadding 来设置缩进
     setPadding(holder.arrowIcon, depth, -1);
     //根据数据改变 view 的状态(比如图标什么的)
     toggle(node, holder);
    }
    
    @Override
     public void toggle(Object... objects) {
      //需要自己实现
     }
}

之后只要设置一下适配器:

  val adapter = FileTreeAdapter(this@MainActivity, root, R.layout.layout_file_tree_item)
  treeView.treeAdapter = adapter

License

Apache 2.0