농장/Android

[Android/Kotlin] Horizontal 가로 슬라이드 Recycler View 사용하기 (완전 쉬움)

귤발자 2021. 5. 15. 22:43
728x90
반응형

 작년 가을 이후로 안드로이드를 만진 적이 없는데, 요즘 다시 붙잡고 있다.

 오랜만에 (반년전이지만 나에겐 큰 시간) 만지니 날아간 기억들이 있어 복습한다는 느낌으로 자료를 찾아가며 진행중이다. Recycler view는 사용방법이 무조건 익숙해야한다고 느껴서 이번에 제대로 뽀갰다.

우왕 이모티콘 생겼다. 업데이트된듯 !


 

1. RecyclerView 관련 XML element 생성

리사이클러뷰androidx.recyclerview.widget.RecyclerView 와 그 아이템 뷰 생성

 

아이템 뷰 Root layout 크기 속성은 아래와 같이 권장한다. 

  • item_room.xml
android:layout_width="wrap_content"
android:layout_height="wrap_content"

 

리사이클러뷰 생성시 아래 속성을 반드시 입력해야한다.

  • HomeActivity.kt 의 <androidx.recyclerview.widget.RecyclerView>
android:orientation="horizontal" //아이템 수평 배치 (가로 flow)
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"

 

 

 

 

 

2. VO class 생성

Recycler View에 필요한 데이터 객체 정의. 나는 Room이란 객체를 정의하고자 한다.

  • RoomVo.kt
class RoomVo(var title: String, var desc: String, var day: String)

 

 

 

 

3. Adapter class 생성

ViewHolder 내부 클래스, 오버라이드 필수 메서드(onCreateViewHolder, onBindViewHolder, getItemCount) 정의

  • RoomViewAdapter.kt
class RoomViewAdapter(val context: Context, private val RoomData: ArrayList<RoomVo>): RecyclerView.Adapter<RoomViewAdapter.ViewHolder>(){
//RoomData: 바인딩 될 데이터 객체 배열

    inner class ViewHolder(view: View?) : RecyclerView.ViewHolder(view!!){
    	//데이터가 바인딩 당할 Item XML 내부의 elements들
        val title = view?.findViewById<TextView>(R.id.title_meeting_item)
        val desc = view?.findViewById<TextView>(R.id.desc_meeting_item)
        val day = view?.findViewById<TextView>(R.id.date_meeting_item)

        fun bind(room: RoomVo, context: Context){
            title?.text = room.title
            desc?.text = room.desc
            day?.text = room.day
        }
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        val view = LayoutInflater.from(context).inflate(R.layout.item_room, parent, false)
        //바인딩 당할 Item XML 파일명 지정 --R.layout.item_room
        return ViewHolder(view)
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
    	//데이터를 순서대로 바인딩 --포지션(인덱스)값을 활용 가능. 현재는 모든 값 바인딩
        holder.bind(RoomData[position], context)
    }

    override fun getItemCount() = RoomData.size //어탭터로 바인딩된 아이템 개수 반환

}

 

 

 

 

4. Adapter 호출

  • HomeActivity.kt
class HomeActivity : AppCompatActivity() {
    lateinit var roomsRecyclerView: RecyclerView
    lateinit var roomAdapter: RoomViewAdapter
    var roomData = ArrayList<RoomVo>() //바인딩 될 객체 데이터 리스트
    
    override fun onCreate(savedInstanceState: Bundle?) {
      super.onCreate(savedInstanceState)
      setContentView(R.layout.activity_home)

      roomsRecyclerView = findViewById(R.id.rooms_recycleView_home)
      roomAdapter = RoomViewAdapter(this, roomData)
      roomsRecyclerView.adapter = roomAdapter //리사이클러뷰에 어댑터 지정
    }
}

 

 

728x90
반응형