? Tree data structure to Android View
TreeView implementation in Android.Now available on Jitpack:tada:
TreeView | File Explorer(Advanced Example) |
---|---|
①Multi-level tree view | Basic file manager layout |
②Remember expansion state | Automatically expand the last unclosed directory |
③Customize TreeAdapter | Different types of documents show different Icon |
④Dynamic add and delete nodes | refresh status after delete and add files |
⑤Select listener | Long press node for file operations (Copy, Cut, Rename, Delete) |
⑥Animation support | Add or delete files with animation |
You can also see a more simple example.
TreeView extends from ListView.
DFS travel the expandable tree node, and convert it to List which adapt with TreeAdapter.
Use SimpleTreeAdapter ot set different indentation on nodes of different depths.
Use LinkedList to store node's children, see DefaultTreeNode.
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
dependencies {
implementation 'com.github.LeeReindeer:Tree2View:v0.1.2'
}
Feel free to use it as 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>
var root :DefaultTreeNode? = DefaultTreeNode("Root")
tree_view.root = root
val child1 = DefaultTreeNode("Child1")
val child2 = DefaultTreeNode("Child2")
// After create a node your should immediately add it.
root.addChild(child1)
root.addChild(child2)
val child3 = DefaultTreeNode("Child3")
child1.addChild(child3)
//whether the root's children is expanded by default
tree_view.isRootVisible = true
//animation
tree_view.isDefaultAnimation = true
Tree2View has a default click listener, but it's ok to add your own.You can refer to here.
TreeAapater
, like this:public class FileTreeAdapter extends TreeAdapter<FileItem> {
//resourceId is your customized view resourceId, please use RelativeLayout, and let view neighbour.
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
//...
//call padding for a better UI
setPadding(holder.arrowIcon, depth, -1);
//toggle your view's status here
toggle(node, holder);
}
@Override
public void toggle(Object... objects) {
}
Then simply add:
val adapter = FileTreeAdapter(this@MainActivity, root, R.layout.layout_file_tree_item)
treeView.treeAdapter = adapter
Apache 2.0