[Android] Expandable RecyclerView 구현하기

2022. 11. 22. 11:00·Android/UI
반응형

리스트에서 게시물을 클릭했을 때 게시물 아래로 콘텐츠가 펼쳐지는 앱을 본 적이 있을 것이다.

아이템을 클릭했을 때 내용을 보이거나 숨기거나 하는 기능에 Expandable이라고 명칭을 붙이는 것 같다.

 

ListView에서는 ExpandalbeListView라는 Widget이 존재하지만 RecyclerView에는 없다.

따라서 Expandable RecyclerView를 직접 구현해야 한다.

 

Expandable RecyclerView는 아이템을 클릭했을 때 현재 목록이 펼쳐졌는지 닫혀있는지 알 수 있도록 하는 상태 값이 필요하다. 그리고 상태 값에 따라서 내용을 visible하거나 gone 처리를 하면 된다.

 

예제로 RecyclerView의 아이템을 클릭했을 때 목록을 펼치고 다시 누르면 닫히는 앱을 만들었다.


data class에 상태 값 추가하기

data class SampleData(
    val title: String,
    val date: String,
    val content: String,
    var expandable: Boolean = false
)

View에 노출되는 값은 title, date, content 이지만 펼쳐졌는지 닫혀있는지 상태를 알기 위해 expandable이라는 변수를 넣어줬다.

기본적으로 목록이 닫혀있기 때문에 default 값으로 false를 줬다.


아이템을 클릭했을 때 동작 처리

inner class ViewHolder(private val mBinding: ListItemRecyclerviewBinding) : RecyclerView.ViewHolder(mBinding.root) {
    fun bind(mSampleData: SampleData){
        mBinding.tvTitle.text = mSampleData.title
        mBinding.tvDate.text = mSampleData.date
        mBinding.tvContent.text = mSampleData.content

        mBinding.ctParent.setOnClickListener {
            if(mSampleData.expandable){
                mBinding.ctChild.visibility = View.GONE
                mBinding.ivDrop.setImageResource(R.drawable.drop_down_icon)
                mSampleData.expandable = false
            }else{
                mBinding.ctChild.visibility = View.VISIBLE
                mBinding.ivDrop.setImageResource(R.drawable.drop_up_icon)
                mSampleData.expandable = true
            }
        }
    }
}

 

처음부터 보이는 View를 parent, 펼쳐지는 View를 child라고 생각하고 변수명을 작성했다.

parent가 클릭됐을 때 expandable 값을 체크하여 child가 펼쳐지거나 닫히도록 했고, 해당 동작에 따라서 expandable 값을 변경시켰다.

 

해당 코드는 Adapter 내에서 사용했지만 커스텀 리스너를 통해 Activity나 Fragment에서 처리할 수 있다.


 

전체 코드

 

반응형

'Android > UI' 카테고리의 다른 글

[Android] addView로 Layout에 View 추가하기  (0) 2022.11.28
[Android] TextWatcher로 텍스트 변경될 때마다 이벤트 처리하기  (0) 2022.11.23
[Android] BottomSheetDialog 사용하기  (0) 2022.11.21
[Android] ViewPager2로 TabLayout 구성하기  (0) 2022.11.21
[Android] Fragment 하나로 TabLayout 구성하기  (0) 2022.11.20
'Android/UI' 카테고리의 다른 글
  • [Android] addView로 Layout에 View 추가하기
  • [Android] TextWatcher로 텍스트 변경될 때마다 이벤트 처리하기
  • [Android] BottomSheetDialog 사용하기
  • [Android] ViewPager2로 TabLayout 구성하기
O_Gyong
O_Gyong
안드로이드 기술 정리
  • O_Gyong
    O_Gyong's TECH
    O_Gyong
    • 분류 전체보기 (81)
      • Android (58)
        • ADB (4)
        • Architecture (1)
        • Data (5)
        • Firebase (2)
        • Network & Connecting (4)
        • Security & Privacy (3)
        • UI (24)
        • 기타 (3)
        • 이슈 처리 (14)
      • Android Studio (5)
      • Git (3)
      • 작업 일지 (13)
  • 최근 글

  • 인기 글

  • 태그

    MQTT
    해상도
    flow
    GIT
    SharedPreferences
    CalendarView
    in-app update
    BLE
    Room
    webview
    compose
    kizitonwose
    loading
    Pagination
    Navigation
    Android Studio
    Android
    CameraX
    github
    TabLayout
    Bluetooth
    firebase
    issue
    hilt
    paging
    Paging3
    ADB
    Andoird
    Kotlin
    recyclerview
  • 링크

    • GitHub
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • hELLO· Designed By정상우.v4.10.4
O_Gyong
[Android] Expandable RecyclerView 구현하기
상단으로

티스토리툴바