RecyclerView를 사용해서 해당 아이템이 클릭되면 Expand 되게 만드세요.
코드를 짜기에는 너무 길 것 같구요. 구글에 Expandable RecyclerView라고 검색하시면 원하시는 검색결과를 찾으실 수 있을 것 같아요. Github에도 라이브러리아 오픈 소스로 된 코드가 많이 있을 겁니다.
기본적인 동작 원리는 리사이클러뷰에 필요한 아이템을 뿌리신 후, 아이템을 클릭했을 때 하위 메뉴가 존재하면 토글을 시키셔서 하위 아이템들을 보여주었다/감췄다 하시면 됩니다. 하위아이템의 상태는 SparseArray나 아이템 자체에 boolean 변수를 두셔서 관리하셔야 하구요. 아이템들의 상태 관리는 가능하면 RecyclerViewAdapter 외부에서 하시도록 하세요. ViewHolder에서는 하지 마시구요. 각 아이템을 아래처럼 자기 참조를 하게끔 구성하시면 되지 않을까 싶네요.
data class NavigationMenuIem(
@StringRes val textResId: Int,
val id: Int = textResId,
val expanded: Boolean = false,
val subItems: List<NavigationMenuIem> = emptyList()
) {
@DrawableRes
val toggleIconResId: Int
get() = when {
subItems.isEmpty() -> 0
expanded -> R.drawable.ic_chevron_up
else -> R.drawable.down
}
}
val NaviationMenuItems = listOf(
NavigationMenuIem(textResId = R.string.week),
NavigationMenuIem(textResId = R.string.day),
NavigationMenuIem(textResId = R.string.reminder),
NavigationMenuIem(textResId = R.string.mobile, subItems = listOf(
NavigationMenuIem(textResId = R.string.my_calendar),
NavigationMenuIem(textResId = R.string.birthdays),
NavigationMenuIem(textResId = R.string.holidays),
NavigationMenuIem(textResId = R.string.public_days),
NavigationMenuIem(textResId = R.string.my_secure_calendar)
),
NavigationMenuIem(textResId = R.string.events, subItems = listOf(...)
)