icons are taken from freepik.com
This is an implementation of AccordionView in Android using ConstraintLayout and ConstraintSet.
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
dependencies {
implementation 'com.github.worker8:AccordionView:VERSION'
}
Replace the VERSION with the latest one you can find here: https://github.com/worker8/AccordionView/releases
Example:
implementation 'com.github.worker8:AccordionView:1.0.x'
You can exclude the support library and use your own version if you face some conflict:
implementation("com.github.worker8:AccordionView:$libVersions.accordionView") {
exclude group: 'com.android.support'
}
To use AccordionView, you can refer to the example in this repo:
https://github.com/worker8/AccordionView/blob/master/app/src/main/java/beepbeep/accordionView/
It works very similarly to RecyclerView.
First you need to include it in the xml. Example can be found here
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<beepbeep.accordian_library.AccordionView
android:id="@+id/accordian_view"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@color/md_white_1000"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
AccordionView is a child of ConstraintLayout. However, don't include any children inside AccordionView, the behavior will be unexpected.
Instead, supply the data using AccordionAdapter.
AccordionAdapter is the supplier of data. for AccordionView. Example can be found here.
It works similarly to RecyclerView.Adapter:
AccordionAdapter has 5 methods to be overriden:
fun onCreateViewHolderForTitle(parent: ViewGroup): AccordionView.ViewHolder
fun onCreateViewHolderForContent(parent: ViewGroup): AccordionView.ViewHolder
fun onBindViewForTitle(viewHolder: AccordionView.ViewHolder, position: Int, arrowDirection: ArrowDirection)
fun onBindViewForContent(viewHolder: AccordionView.ViewHolder, position: Int)
fun getItemCount(): Int
onCreateViewHolderForTitle and onCreateViewHolderForContent are used for view creation:
onBindViewForTitle and onBindViewForContent on the other hand are used for view binding, such as: setting up the data, and setting up listeners, loading images, etc.
getItemCount on the other hand tells AccordionView how many items you have.
Refer to this blog post where I described in depth:
https://bloggie.io/@_junrong/the-making-of-accordionview-using-constraintlayout
This view does not take into account if you supply too many data and fill up the screen, it is best used for cases where you only have a few items to be shown.


