DynamicTree - Android view library that represents tree structure data.

Related tags

App DynamicTree
Overview

Android view library that represents tree structure data.

Sample

tree_sample

Install

Gradle

  1. Add the JitPack repository to your project level build.gradle file
allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}
  1. Add the dependency to your app level build.gradle file
dependencies {
    implementation "com.github.wooooooak.DynamicTree:$version"
    implementation "androidx.recyclerview:recyclerview:$recyclerViewVersion"
}

The latest version is 1.0.0. Checkout here

Usage

1. Set resource files (layout and color)

layout.xml

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    ...
    >
    <wooooooak.com.library.view.DynamicTreeView
        android:id="@+id/dt_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:dt_animation_duration="250"
        app:dt_depth_limit="3"
        app:dt_list_page_margin="8dp"
        app:dt_stack_view_color_array="@array/dtColorArray" />

</androidx.constraintlayout.widget.ConstraintLayout>
  • dt_list_page_margin : determines how overlapping the view looks. If the page goes beyond the dt_depth_limit, the new data is rendered but the depth shown to the user is still the depth you set.

  • dt_stack_view_color_array : "dt_stack_view_color_array" should be one more than "dt_depth_limit".

view_attrs

colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    ...
    <array name="dtColorArray">
        <item>#74c0fc</item>
        <item>#a5d8ff</item>
        <item>#d0ebff</item>
        <item>#e7f5ff</item>
    </array>
</resources>

2. Prepare Tree Data

We need a list of tree. And Each node must implement UniqueKey for search algorithm.

// For Eaxample

data class Node(
    override val uniqueKey: String,  // you should override
    override val child: List<Node>?,  // you should override
    val personInfo: Person? // or anything more
) : UniqueKey

data class Person(
    val age: Int,
    val number: String
)

Finally, DynamicTree uses the node list.

 dt_view.treeData = listOf<Node>(...)

3. Make OrgGroupAdapter

class TestAdapter: DynamicTreeAdapter<Node>(
    R.layout.item_group, // layout id for Group item view
    R.layout.item_last_node // layout id for Last node item view
) {
    override fun isTargetNode(item: Node): Boolean {
        TODO("Used to check whether it is the last node or not")
    }

    override fun bindDefultLastNodeView(view: View, item: Node) {
        TODO("Bind default last node view ")
    }

    override fun bindDefaultGroupView(view: View, item: Node) {
        TODO("Bind default group item view ")
    }

    override fun bindClickedGroupView(view: View, item: Node) {
        TODO("Bind group item view when clicked")
    }

    override fun onClickGroupItem(groupItemView: View, item: Node) {
        TODO("Called when group item clicked")
    }

    override fun onClickLastNodeItem(lastNodeItemView: View, item: Node) {
        TODO("Called when last node clicked")
    }
}

Note that DynamicTreeAdapter takes the UniquKey type as generic.

4. In your Activity or Fragment

    override fun onCreate(savedInstanceState: Bundle?) {
        ...
        val treeList: List<Node> = ...
        dt_view.treeData = treeList
        dt_view.orgAdapterGenerator = { MyOrgGroupAdapter() }
        dt_view.render()
    }

    override fun onBackPressed() {
        if (dt_view.canGoBack()) {
            dt_view.goBack()
        } else {
            super.onBackPressed()
        }
    }

You can clone this project and run the demo with sample data immediately.

License

Copyright 2020 wooooooak (Yongjun LEE)

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
You might also like...
This android app fetches the data from the USGS API in real time to display a list of earthquakes.

This android app fetches the data from the USGS API in real time to display a list of earthquakes. On clicking an earthquake it opens a browser window with the complete information of the earthquake along with the location on a map.

An android application which uses HBO's Silicon Valley data (Mockable.io) for listing TV show episodes.
An android application which uses HBO's Silicon Valley data (Mockable.io) for listing TV show episodes.

TVShowCaseApp An android application which uses HBO's Silicon Valley data (Mockable.io) for listing TV show episodes. Prerequisites 1. Check the API I

Earthquake Android application for Indonesia region with data from BMKG
Earthquake Android application for Indonesia region with data from BMKG

Awas Gempa Bumi Aplikasi yang menampilkan data gempa terbaru di Indonesia dengan sumber dari BMKG. Fitur : Menampilkan data gempa terbaru sesuai denga

Repository ini berguna untuk menyimpan kode yang dibutuhkan untuk membuat sebuah Aplikasi Android yang memiliki ListView yang menggunakan Custom Adapter dan Mengambil data dari Database secara CRUD.

AndroidListView Repository ini berguna untuk menyimpan kode yang dibutuhkan untuk membuat sebuah Aplikasi Android yang memiliki ListView yang mengguna

Forage-project - This is a project given by Google Android Developers team. It's specifically created for data persistance.

Forage - Starter Code Starter code for the fifth independent project for Android Basics in Kotlin. This project pairs with Unit 5 of Android Basics in

Usages of Factory Method for Data Source Layer (Local/Remote - Repository) with DI & MVVM [Android].

Usages of Factory Method for Data Source Layer (Local/Remote - Repository) with DI & MVVM [Android] Stacks: MVVVM DI (Hilt) Factory Method (Design Pat

MovieLibrary -An android application which uses tmdb API to fetch the data for various movies and TV Shows
MovieLibrary -An android application which uses tmdb API to fetch the data for various movies and TV Shows

MovieLibrary -An android application which uses tmdb API to fetch the data for various movies and TV Shows

Tmdb - An Android app which displays data from The Movie Database API
Tmdb - An Android app which displays data from The Movie Database API

TMDB - The Movie Database This is my first android app! This project is an Andro

Movies-db-example - Sample Android application that loads movies data from a remote server

Movies Application Sample Android application that loads movies data from a remo

Releases(1.0.0)
Owner
LEE YONGJUN
💎 Android Developer
LEE YONGJUN
CMPLR Technologies 8 Apr 5, 2022
Show worldwide headline. API/Glide library/recycler view/volley library/kotlin/xml/ chrome custom tabs

Show worldwide headline. API/Glide library/recycler view/volley library/kotlin/xml/ chrome custom tabs. -> you can click on headline and it will open an article of that news in the app(no need to go to chrome or any browser)

SUMIT KUMAR 5 Nov 28, 2022
An easy to use android library to let devs know how much internet-data their app is consuming

EasyAnalytics! an easy to use android library to let developers know how much internet-data their app is consuming. We can identify this as we want ba

Sachin Rajput 13 Feb 21, 2022
To Do List App is built in Kotlin using Material 3, Data Binding, Navigation Component Graphs, Room persistence library, Kotlin coroutines, LiveData, Dagger Hilt, and Notifications following MVVM Architecture.

ToDoListApp ToDoList App demonstrates modern Android development with Hilt, Coroutines, LiveData, Jetpack (Room, ViewModel), and Material 3 Design bas

Naman Garg 10 Jan 8, 2023
📱 Android Library to implement Rich, Beautiful, Stylish 😍 Material Navigation View for your project with Material Design Guidelines. Easy to use.

Material NavigationView for Android ?? ?? Android Library to implement Rich, Beautiful Material Navigation View for your project with Material Design

Shreyas Patil 198 Dec 17, 2022
UIPresenter library for android view-based UI presentation

UIPresenter This android library is like a tour guide for your app's Views. It h

Germain Kevin 21 Sep 21, 2022
Environmental-Monitoring-Android-App - This Android App is used to monitor environmental parameters data from remote sensors

Environmental-Monitoring-Android-App - This Android App is used to monitor environmental parameters data from remote sensors. Parameters includes but not limited to temperature, humidity, air quality, level of Ionizing radiation, ...

Francisco Pascal Elias TAMBASAFIDY 0 Jan 4, 2022
Read and write Android/data files on Android 13 without root

Android 13 (Tiramisu API 33) Read and write /Android/data or /Android/obb not need root Android 13 read and write /Android/data or /Android/obb withou

FolderV 59 Jan 4, 2023
HideDroid is an Android app that allows the per-app anonymization of collected personal data according to a privacy level chosen by the user.

HideDroid An Android App for preserving user privacy HideDroid is an Android app that allows the per-app anonymization of collected personal data acco

null 100 Dec 12, 2022