diff --git a/README.md b/README.md
index 15070e9..0fe570b 100644
--- a/README.md
+++ b/README.md
@@ -4,8 +4,11 @@
[](https://github.com/AdrianKuta/Expandable-RecyclerView/blob/master/LICENSE)
[](https://circleci.com/gh/AdrianKuta/Expandable-RecyclerView)
-Library is currently during implementation! It is **not** ready to use yet :/
+
-Final version will be released soon.
+This RecyclerViewAdapter use Tree(Data Structure) to keep all objects.
+## Download
-
+ implementation "com.github.adriankuta:expandable-recyclerView:$latest_versions"
+
+
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 0fec2ab..b09b45e 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -21,6 +21,9 @@ android {
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
+ dataBinding {
+ enabled = true
+ }
}
dependencies {
@@ -29,6 +32,7 @@ dependencies {
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.core:core-ktx:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
+ implementation 'com.github.adriankuta:expandable-recyclerView:0.0.1-beta02'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
diff --git a/app/src/main/java/com/github/adriankuta/ExpandableAdapter.kt b/app/src/main/java/com/github/adriankuta/ExpandableAdapter.kt
new file mode 100644
index 0000000..82f2ff0
--- /dev/null
+++ b/app/src/main/java/com/github/adriankuta/ExpandableAdapter.kt
@@ -0,0 +1,97 @@
+package com.github.adriankuta
+
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.recyclerview.widget.RecyclerView
+import com.github.adriankuta.databinding.ItemLevel1Binding
+import com.github.adriankuta.databinding.ItemLevel2Binding
+import com.github.adriankuta.databinding.ItemLevel3Binding
+import com.github.adriankuta.expandable_recyclerview.ExpandableTreeNode
+import com.github.adriankuta.expandable_recyclerview.MultilevelRecyclerViewAdapter
+import com.github.adriankuta.expandable_recyclerview.expandableTree
+
+class ExpandableAdapter :
+ MultilevelRecyclerViewAdapter() {
+
+ private var tree: ExpandableTreeNode? = null
+
+ fun setTree(tree: ExpandableTreeNode) {
+ this.tree = tree
+ notifyDataSetChanged()
+ }
+
+ override fun getTreeNodes(): ExpandableTreeNode = tree ?: expandableTree("") {}
+
+ override fun onCreateViewHolder(parent: ViewGroup, nestLevel: Int): ExpandableViewHolder {
+ return when (nestLevel) {
+ 1 -> ExpandableViewHolder.Level1(parent.inflateLevel1())
+ 2 -> ExpandableViewHolder.Level2(parent.inflateLevel2())
+ 3 -> ExpandableViewHolder.Level3(parent.inflateLevel3())
+ else -> throw IllegalArgumentException("Not implemented ViewHolder for nest level: $nestLevel")
+ }
+ }
+
+ override fun onBindViewHolder(
+ holder: ExpandableViewHolder,
+ treeNode: ExpandableTreeNode,
+ nestLevel: Int
+ ) {
+ holder.bind(treeNode) {
+ toggleGroup(it)
+ }
+ }
+
+ sealed class ExpandableViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+
+ class Level1(private val binding: ItemLevel1Binding) : ExpandableViewHolder(binding.root) {
+ override fun bind(
+ node: ExpandableTreeNode,
+ onClickListener: ((ExpandableTreeNode) -> Unit)?
+ ) {
+ binding.node = node
+ binding.root.setOnClickListener { onClickListener?.invoke(node) }
+ }
+ }
+
+ class Level2(private val binding: ItemLevel2Binding) : ExpandableViewHolder(binding.root) {
+ override fun bind(
+ node: ExpandableTreeNode,
+ onClickListener: ((ExpandableTreeNode) -> Unit)?
+ ) {
+ binding.node = node
+ binding.root.setOnClickListener { onClickListener?.invoke(node) }
+ }
+ }
+
+ class Level3(private val binding: ItemLevel3Binding) : ExpandableViewHolder(binding.root) {
+ override fun bind(
+ node: ExpandableTreeNode,
+ onClickListener: ((ExpandableTreeNode) -> Unit)?
+ ) {
+ binding.node = node
+ binding.root.setOnClickListener { onClickListener?.invoke(node) }
+ }
+ }
+
+
+ abstract fun bind(
+ node: ExpandableTreeNode,
+ onClickListener: ((ExpandableTreeNode) -> Unit)? = null
+ )
+
+ }
+
+ private fun ViewGroup.inflateLevel1(): ItemLevel1Binding {
+ return ItemLevel1Binding.inflate(LayoutInflater.from(context), this, false)
+ }
+
+ private fun ViewGroup.inflateLevel2(): ItemLevel2Binding {
+ return ItemLevel2Binding.inflate(LayoutInflater.from(context), this, false)
+ }
+
+ private fun ViewGroup.inflateLevel3(): ItemLevel3Binding {
+ return ItemLevel3Binding.inflate(LayoutInflater.from(context), this, false)
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/github/adriankuta/MainActivity.kt b/app/src/main/java/com/github/adriankuta/MainActivity.kt
index cef3e6c..da606f4 100644
--- a/app/src/main/java/com/github/adriankuta/MainActivity.kt
+++ b/app/src/main/java/com/github/adriankuta/MainActivity.kt
@@ -1,12 +1,38 @@
package com.github.adriankuta
-import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
+import androidx.appcompat.app.AppCompatActivity
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.github.adriankuta.expandable_recyclerview.expandableTree
+import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
+
+
+ val tree = expandableTree("World") {
+ child("North America") {
+ child("USA")
+ }
+ child("Europe") {
+ child("Poland") {
+ child("Warsaw")
+ }
+ child("Germany")
+ }
+ child("Asia") {
+ child("China")
+ }
+ }
+
+ val adapter = ExpandableAdapter()
+ recyclerView.layoutManager = LinearLayoutManager(this, RecyclerView.VERTICAL, false)
+ recyclerView.adapter = adapter
+
+ adapter.setTree(tree)
}
}
diff --git a/app/src/main/res/drawable/ic_expand_less_black_24dp.xml b/app/src/main/res/drawable/ic_expand_less_black_24dp.xml
new file mode 100644
index 0000000..3afdf96
--- /dev/null
+++ b/app/src/main/res/drawable/ic_expand_less_black_24dp.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_expand_more_black_24dp.xml b/app/src/main/res/drawable/ic_expand_more_black_24dp.xml
new file mode 100644
index 0000000..8d57dbc
--- /dev/null
+++ b/app/src/main/res/drawable/ic_expand_more_black_24dp.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_last_element.xml b/app/src/main/res/drawable/ic_last_element.xml
new file mode 100644
index 0000000..6a7e4fa
--- /dev/null
+++ b/app/src/main/res/drawable/ic_last_element.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_middle_element.xml b/app/src/main/res/drawable/ic_middle_element.xml
new file mode 100644
index 0000000..eeab090
--- /dev/null
+++ b/app/src/main/res/drawable/ic_middle_element.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_vertical_line.xml b/app/src/main/res/drawable/ic_vertical_line.xml
new file mode 100644
index 0000000..b1e6f93
--- /dev/null
+++ b/app/src/main/res/drawable/ic_vertical_line.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 4fc2444..8a8a45f 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -6,13 +6,13 @@
android:layout_height="match_parent"
tools:context=".MainActivity">
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_level_1.xml b/app/src/main/res/layout/item_level_1.xml
new file mode 100644
index 0000000..0941bfa
--- /dev/null
+++ b/app/src/main/res/layout/item_level_1.xml
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_level_2.xml b/app/src/main/res/layout/item_level_2.xml
new file mode 100644
index 0000000..e093466
--- /dev/null
+++ b/app/src/main/res/layout/item_level_2.xml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_level_3.xml b/app/src/main/res/layout/item_level_3.xml
new file mode 100644
index 0000000..cc2e3ae
--- /dev/null
+++ b/app/src/main/res/layout/item_level_3.xml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/expandable-recyclerview/build.gradle b/expandable-recyclerview/build.gradle
index f38bf75..5cb348b 100644
--- a/expandable-recyclerview/build.gradle
+++ b/expandable-recyclerview/build.gradle
@@ -15,7 +15,7 @@ android {
minSdkVersion 23
targetSdkVersion 29
versionCode 1
- versionName "0.0.1-beta02"
+ versionName "1.0.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles 'consumer-rules.pro'
diff --git a/expandable-recyclerview/src/main/java/com/github/adriankuta/expandable_recyclerview/MultilevelRecyclerViewAdapter.kt b/expandable-recyclerview/src/main/java/com/github/adriankuta/expandable_recyclerview/ExpandableRecyclerViewAdapter.kt
similarity index 95%
rename from expandable-recyclerview/src/main/java/com/github/adriankuta/expandable_recyclerview/MultilevelRecyclerViewAdapter.kt
rename to expandable-recyclerview/src/main/java/com/github/adriankuta/expandable_recyclerview/ExpandableRecyclerViewAdapter.kt
index 0e80119..fd539ba 100644
--- a/expandable-recyclerview/src/main/java/com/github/adriankuta/expandable_recyclerview/MultilevelRecyclerViewAdapter.kt
+++ b/expandable-recyclerview/src/main/java/com/github/adriankuta/expandable_recyclerview/ExpandableRecyclerViewAdapter.kt
@@ -3,7 +3,7 @@ package com.github.adriankuta.expandable_recyclerview
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
-abstract class MultilevelRecyclerViewAdapter :
+abstract class ExpandableRecyclerViewAdapter :
RecyclerView.Adapter() {
private lateinit var treeNodes: ExpandableTreeNode
diff --git a/expandable-recyclerview/src/main/java/com/github/adriankuta/expandable_recyclerview/ExpandableTreeNodeExt.kt b/expandable-recyclerview/src/main/java/com/github/adriankuta/expandable_recyclerview/ExpandableTreeNodeExt.kt
index ec48d7a..535fc7a 100644
--- a/expandable-recyclerview/src/main/java/com/github/adriankuta/expandable_recyclerview/ExpandableTreeNodeExt.kt
+++ b/expandable-recyclerview/src/main/java/com/github/adriankuta/expandable_recyclerview/ExpandableTreeNodeExt.kt
@@ -6,7 +6,7 @@ import com.github.adriankuta.datastructure.tree.ChildDeclaration
@JvmSynthetic
inline fun expandableTree(
value: T,
- childDeclaration: ChildDeclaration
+ childDeclaration: ChildDeclaration = {}
): ExpandableTreeNode {
val treeNode = ExpandableTreeNode(value)
treeNode.childDeclaration()