sean.jin
Spark Code Blog
sean.jin
전체 방문자
오늘
어제
  • 분류 전체보기
    • 개발공부
      • Kotlin
      • LeetCode
      • Algorithm
      • React
    • 주식차트
    • 책리뷰
    • 유틸리티

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 주식입문자
  • 주식투자
  • 쿼드러플위칭데이
  • 아빠와 딸의 주식투자 레슨
  • 부의 추월차선
  • 변동성
  • 경제
  • 트리플 위칭데이
  • 책리뷰
  • 네마녀의날
  • 주식책리뷰
  • 책
  • 오
  • 자기개발
  • 초보
  • 책추천

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
sean.jin

Spark Code Blog

[Kotlin] RecyclerView에 ViewBinding 적용하기 - RecyclerView 1
개발공부/Kotlin

[Kotlin] RecyclerView에 ViewBinding 적용하기 - RecyclerView 1

2021. 5. 28. 10:34
반응형

 

[Kotlin] RecyclerView에 ViewBinding 적용하기

목표

 

 

ViewBinding 추가하기

  • buildGradle.app
android{
	viewBinding {
        enabled = true
    }
}

MainActivity onCreate을 Viewbinding으로 수정해주기

  • **AcivityMainBinding 이름은 연결된 layoutxml파일 이름에따라 변경하셔야합니다**
class MainActivity : AppCompatActivity() {

//추가시작
    private lateinit var binding: ActivityMainBinding 
  
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        val view = binding.root
        setContentView(view)
//추가끝
    }
}

Recyclerview 추가하기 - ViewBinding 적용 전

  • 아래 예시 코드는 체크리스트를위한  코드입니다.
  • ViewBinding적용전과 후의 리사이클러뷰가 어떻게 변했는지 이해를 돕기 위해 넣었습니다.
//List를 위한 data class생성
data class Todo(val text:String, var isDone:Boolean = false)

class TodoAdapter(private val myDataset: List<Todo>) : //Todo타입인 dataset이 Adapter에 들어간다. 
    RecyclerView.Adapter<TodoAdapter.TodoViewHolder>() {

    class TodoViewHolder(val view: View) : RecyclerView.ViewHolder(view) 
    override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int): TodoViewHolder {
        val view = LayoutInflater.from(viewGroup.context) //recyclerview에 각 아이템에 들어갈 layout 인플레이트
            .inflate(R.layout.item_todo, viewGroup, false) 

        return TodoViewHolder(view)
    }

    override fun onBindViewHolder(viewHolder: TodoViewHolder, position: Int) {
        val textView = viewHolder.view.findViewById<TextView>(R.id.todo_text)
        textView.text = myDataset[position].text //todoadapter에서 들어온 dataset이 여기서 position 0부터 하나씩 접근한다.
    }

    override fun getItemCount() = myDataset.size //item의 갯수는 myDataset 사이즈만큼

}

Recyclerview 추가하기 - ViewBinding 적용 후

Viewbinding을 위해 바꾼 것들

  • view:View → binding:ItemTodoBinding
  • RecyclerView.ViewHolder(view) → RecyclerView.ViewHolder(binding.root)
  • TodoViewHolder(view) → TodoViewHolder(ItemTodoBinding.bind(view))
  • delete findViewById and textview → viewholder.binding.textview
data class Todo(val text:String, var isDone:Boolean = false)

class TodoAdapter(private val myDataset: List<Todo>) :
    RecyclerView.Adapter<TodoAdapter.TodoViewHolder>() {

	//view 대신 binding으로 넣어준다. view-> recyclerview.viewholder안에도 binding.root로 변환. 
    class TodoViewHolder(val binding: ItemTodoBinding) : RecyclerView.ViewHolder(binding.root)
	//binding의 타입은 item Todobinding인 이유는 리사이클러뷰에 각각 하나씩 들어가는 itemlayout의 이름이 item_todo이기때문이다. 	  

		override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int): TodoViewHolder {
        val view = LayoutInflater.from(viewGroup.context)
            .inflate(R.layout.item_todo, viewGroup, false)
        return TodoViewHolder(ItemTodoBinding.bind(view))  //binding을 access하기위해 itemTodoBinding.bind(view)로
		}
    

	//findviewbyId대신 viewholder:binding으로 view access
    override fun onBindViewHolder(viewHolder: TodoViewHolder, position: Int) {//view->viewholder로
        viewHolder.binding.todoText.text= myDataset[position].text //findViewById대신 viewholder.binding으로 접근
    }

	//동일
    override fun getItemCount() = myDataset.size

}

Recyclerview 추가하기 - RecyclerView oncreate에 선언

  • 만든 Recyclerview Adapter와 Viewholder를 MainActivity onCreate에 추가해줍니다.
class MainActivity : AppCompatActivity() {
//추가 시작
	private lateinit var binding: ActivityMainBinding
	private val data = arrayListOf<Todo>()
//추가 끝

	override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        binding = ActivityMainBinding.inflate(layoutInflater)
        val view = binding.root
        setContentView(view)

//추가 시작
        binding.recyclerView.layoutManager = LinearLayoutManager(this)
        binding.recyclerView.adapter = TodoAdapter(data)
//추가 끝

 

 


참고 자료

 

ViewModel 개요  |  Android 개발자  |  Android Developers

ViewModel을 사용하면 수명 주기를 인식하는 방식으로 UI 데이터를 관리할 수 있습니다.

developer.android.com

 

 

RecyclerView로 동적 목록 만들기  |  Android 개발자  |  Android Developers

RecyclerView로 동적 목록 만들기   Android Jetpack의 구성요소 RecyclerView를 사용하면 대량의 데이터 세트를 효율적으로 표시할 수 있습니다. 개발자가 데이터를 제공하고 각 항목의 모양을 정의하면 R

developer.android.com


 

다음편에서는 Recyclerview에 아이템을 추가 및 삭제 하는 법을 다뤄보겠습니다. 

 

[Kotlin] 리사이클러뷰에 setOnClickListener 추가 삭제하기 - RecyclerView 2

[Kotlin] 리사이클러뷰에 setonClickListener 추가 삭제하기 - RecyclerView 2 전 포스트에서 Recyclerview에 Viewbinding을 적용했는데요, 이번 포스트에서는 버튼을 눌러서 항목을 지우고 삭제하는 기능을 구현..

underdog11.tistory.com

 

 

반응형

'개발공부 > Kotlin' 카테고리의 다른 글

[Kotlin] Collection 정리 list, set, map 차이 - HashMap, hashmapof, mutableMap, setOf, mutableSetOf,ArrayListof,listof 사용법 및 차이  (0) 2021.06.10
[Kotlin] Google AdMob 앱 수익창출 - 광고 달기 배너달기 / 버튼클릭시 전면광고  (0) 2021.06.03
[Kotlin] Material Design Date Picker - 날짜 선택기 사용법, 특정 구간날짜 비활성화  (0) 2021.05.31
[Kotlin] RecyclerView에 LiveData/ViewModel 적용하기 - 화면전환후 데이터유지 - RecyclerView 3  (0) 2021.05.29
[Kotlin] RecyclerView에 setOnClickListener 추가 삭제하기 - RecyclerView 2  (0) 2021.05.28
    '개발공부/Kotlin' 카테고리의 다른 글
    • [Kotlin] Google AdMob 앱 수익창출 - 광고 달기 배너달기 / 버튼클릭시 전면광고
    • [Kotlin] Material Design Date Picker - 날짜 선택기 사용법, 특정 구간날짜 비활성화
    • [Kotlin] RecyclerView에 LiveData/ViewModel 적용하기 - 화면전환후 데이터유지 - RecyclerView 3
    • [Kotlin] RecyclerView에 setOnClickListener 추가 삭제하기 - RecyclerView 2
    sean.jin
    sean.jin
    앱개발, 알고리즘, JS, Kotlin, 미국 취업준비

    티스토리툴바