MCPcopy Index your code
hub / github.com/TellH/RecyclerTreeView

github.com/TellH/RecyclerTreeView @1.2.3

Chat with this repo
repository ↗ · DeepWiki ↗ · release 1.2.3 ↗ · + Follow
91 symbols 194 edges 11 files 13 documented · 14%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

RecyclerTreeView

TreeView implement in Android with RecyclerView..

Effect

Usage

Setup

root build.gradle

allprojects {
    repositories {
        jcenter()
        maven { url "https://jitpack.io" }
    }
}

app build.gradle

dependencies {
    compile 'com.github.TellH:RecyclerTreeView:1.2.0'
}

Quick Start

  • Create a Java bean class and implement the LayoutItemType, to attach item layout id to it.
public class Dir implements LayoutItemType {
    public String dirName;

    public Dir(String dirName) {
        this.dirName = dirName;
    }

    @Override
    public int getLayoutId() {
        return R.layout.item_dir;
    }
}
  • Create a ViewBinder to bind view with the data bean. As you see, provideViewHolder(View itemView) corresponds for onCreateViewHolder in RecyclerView, and bindView corresponds for onBindViewHolder in RecyclerView.
public class FileNodeBinder extends TreeViewBinder<FileNodeBinder.ViewHolder> {
    @Override
    public ViewHolder provideViewHolder(View itemView) {
        return new ViewHolder(itemView);
    }

    @Override
    public void bindView(ViewHolder holder, int position, TreeNode node) {
        File fileNode = (File) node.getContent();
        holder.tvName.setText(fileNode.fileName);
    }

    @Override
    public int getLayoutId() {
        return R.layout.item_file;
    }

    public class ViewHolder extends TreeViewBinder.ViewHolder {
        public TextView tvName;

        public ViewHolder(View rootView) {
            super(rootView);
            this.tvName = (TextView) rootView.findViewById(R.id.tv_name);
        }

    }
}
  • Add TreeNode to TreeViewAdapter.
        List<TreeNode> nodes = new ArrayList<>();
        TreeNode<Dir> app = new TreeNode<>(new Dir("app"));
        nodes.add(app);
        app.addChild(
                new TreeNode<>(new Dir("manifests"))
                        .addChild(new TreeNode<>(new File("AndroidManifest.xml")))
        );
        app.addChild(
                new TreeNode<>(new Dir("java")).addChild(
                        new TreeNode<>(new Dir("tellh")).addChild(
                                new TreeNode<>(new Dir("com")).addChild(
                                        new TreeNode<>(new Dir("recyclertreeview"))
                                                .addChild(new TreeNode<>(new File("Dir")))
                                                .addChild(new TreeNode<>(new File("DirectoryNodeBinder")))
                                                .addChild(new TreeNode<>(new File("File")))
                                                .addChild(new TreeNode<>(new File("FileNodeBinder")))
                                                .addChild(new TreeNode<>(new File("TreeViewBinder")))
                                )
                        )
                )
        );
        TreeNode<Dir> res = new TreeNode<>(new Dir("res"));
        nodes.add(res);
        res.addChild(
                new TreeNode<>(new Dir("layout"))
                        .addChild(new TreeNode<>(new File("activity_main.xml")))
                        .addChild(new TreeNode<>(new File("item_dir.xml")))
                        .addChild(new TreeNode<>(new File("item_file.xml")))
        );
        res.addChild(
                new TreeNode<>(new Dir("mipmap"))
                        .addChild(new TreeNode<>(new File("ic_launcher.png")))
        );
        TreeViewAdapter adapter = new TreeViewAdapter(nodes, Arrays.asList(new FileNodeBinder(), new DirectoryNodeBinder()));
        rv.setAdapter(adapter);
  • set TreeNodeListener to TreeViewAdapter
        adapter.setOnTreeNodeListener(new TreeViewAdapter.OnTreeNodeListener() {
            @Override
            public boolean onClick(TreeNode node, RecyclerView.ViewHolder holder) {
                if (!node.isLeaf()) {
                    //Update and toggle the node.
                    onToggle(!node.isExpand(), holder);
                }
                return false;
            }

            @Override
            public void onToggle(boolean isExpand, RecyclerView.ViewHolder holder) {
                DirectoryNodeBinder.ViewHolder dirViewHolder = (DirectoryNodeBinder.ViewHolder) holder;
                final ImageView ivArrow = dirViewHolder.getIvArrow();
                int rotateDegree = isExpand ? 90 : -90;
                ivArrow.animate().rotationBy(rotateDegree)
                        .start();
            }
        });

Please check out the Demo and source code for more information. If you have any question, feel free to raise an issue. Thanks a lot!

Extension points exported contracts — how you extend this code

LayoutItemType (Interface)
Created by tlh on 2016/10/1 :) [7 implementers]
recyclertreeview-lib/src/main/java/tellh/com/recyclertreeview_lib/LayoutItemType.java
OnTreeNodeListener (Interface)
(no doc) [1 implementers]
recyclertreeview-lib/src/main/java/tellh/com/recyclertreeview_lib/TreeViewAdapter.java

Core symbols most depended-on inside this repo

addChild
called by 18
recyclertreeview-lib/src/main/java/tellh/com/recyclertreeview_lib/TreeNode.java
isExpand
called by 15
recyclertreeview-lib/src/main/java/tellh/com/recyclertreeview_lib/TreeNode.java
getContent
called by 11
recyclertreeview-lib/src/main/java/tellh/com/recyclertreeview_lib/TreeNode.java
removeChildNodes
called by 5
recyclertreeview-lib/src/main/java/tellh/com/recyclertreeview_lib/TreeViewAdapter.java
isLeaf
called by 5
recyclertreeview-lib/src/main/java/tellh/com/recyclertreeview_lib/TreeNode.java
getLayoutId
called by 4
recyclertreeview-lib/src/main/java/tellh/com/recyclertreeview_lib/LayoutItemType.java
findViewById
called by 4
recyclertreeview-lib/src/main/java/tellh/com/recyclertreeview_lib/TreeViewBinder.java
isRoot
called by 4
recyclertreeview-lib/src/main/java/tellh/com/recyclertreeview_lib/TreeNode.java

Shape

Method 76
Class 13
Interface 2

Languages

Java100%

Modules by API surface

recyclertreeview-lib/src/main/java/tellh/com/recyclertreeview_lib/TreeViewAdapter.java28 symbols
recyclertreeview-lib/src/main/java/tellh/com/recyclertreeview_lib/TreeNode.java23 symbols
app/src/main/java/tellh/com/recyclertreeview/viewbinder/DirectoryNodeBinder.java8 symbols
app/src/main/java/tellh/com/recyclertreeview/MainActivity.java8 symbols
recyclertreeview-lib/src/main/java/tellh/com/recyclertreeview_lib/TreeViewBinder.java6 symbols
app/src/main/java/tellh/com/recyclertreeview/viewbinder/FileNodeBinder.java6 symbols
app/src/main/java/tellh/com/recyclertreeview/bean/File.java3 symbols
app/src/main/java/tellh/com/recyclertreeview/bean/Dir.java3 symbols
recyclertreeview-lib/src/main/java/tellh/com/recyclertreeview_lib/LayoutItemType.java2 symbols
app/src/test/java/tellh/com/recyclertreeview/ExampleUnitTest.java2 symbols
app/src/androidTest/java/tellh/com/recyclertreeview/ExampleInstrumentedTest.java2 symbols

For agents

$ claude mcp add RecyclerTreeView \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact