[TIL] 230808 회고

서정한·2023년 8월 8일
0

내일배움캠프 7기

목록 보기
27/66

Intro

  • 오늘은 하루종일 RecyclerView와 씨름했다.

RecyclerView

  • 오늘 한4번정도 프로젝트를 지우고 다시 만들어 RecyclerView 구현을 백지에서부터 해봤다.
  • 이정도해보니 기계적으로 RecyclerView를 생성하는 단계가 머리속에서 조금씩 그려졌다.
  • RecyclerView생성과정은 아래와 같다.
    • 먼저 만들고자하는 xml에 선언한다.
    • RecyclerView에 들어갈 item을 디자인한다.
    • data가 필요할경우 model class와 필요한 데이터를 준비한다.
    • RecyclerViewAdapter를 만든다. Adapter는 아래와같이 생성한다.
      • class를 생성한다. 그 후 RecyclerView.Adapter<MyClassName.ViewHolder> 를 상속한다. 여기서 MyClassName은 내가만든 Adapter class의 이름이고, ViewHolder는 내가 만든 adapter 안에 만든 클레스 이름이다.
      • ViewHolder 클래스를 만든다. 여기에서는 xml layout의 컴포넌트들을 findviewById로 가져와 사용할 준비만 해준다.
      • 그 후 3개의 메서드를 상속받는데 3가지 모두 구현해줘야한다.
        • onCreateViewHolder: ViewHolder를 만들때 동작하는 메서드로 여기서 아까 디자인한 xml item을 가져와 view객체에 보내 화면에 띄울 준비를 한다.
        • onBindViewHolder: 여기에서는 앞서 ViewHolder에 선언했던 컴포넌트들에 데이터를 넣어준다.
        • getItemCount: RecyclerView에 몇개의 item을 띄울지 return해준다.
RecyclerViewAdapter.kt

package bootcamp.sparta.advencedpartymission1

import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView

class RecyclerViewAdapter : RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder>(){

    class ViewHolder(view : View) : RecyclerView.ViewHolder(view) {
        val text = view.findViewById<TextView>(R.id.tv_item_text)
    }

    override fun onCreateViewHolder(
        parent: ViewGroup,
        viewType: Int
    ): RecyclerViewAdapter.ViewHolder {
        val view = LayoutInflater.from(parent.context).inflate(R.layout.fragment_item_recyclerview, parent, false)
        val holder = ViewHolder(view)
        return holder
    }

    override fun onBindViewHolder(holder: RecyclerViewAdapter.ViewHolder, position: Int) {
        holder.text.text = "toDo"
    }

    override fun getItemCount(): Int {
        return 50
    }
}
- 이제 드디어 MainActivity에 구현해주면 끗! 구현순서는 recyclerView를 findviewById를 통해 가져오고, adapter Class의 instance를 생성한 후 recyclerview.adapter에 넣어준 후 Layout을 설정해주면 끗! 
- 아래 내용은 Fragment에서 구현해서 이렇게 만든것이고 MainActivity에서는 어차피 onCreate안에서 만들것이니까 바로 findViewById를 바로 선언하여 쓸 수 있다.
TodoFragment.kt

class TodoFragment : Fragment() {
    lateinit var recyclerview : RecyclerView
    lateinit var adapter : RecyclerViewAdapter

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        val view = inflater.inflate(R.layout.fragment_todo, container, false)
        recyclerview = view.findViewById<RecyclerView>(R.id.rv_todo)
        adapter = RecyclerViewAdapter()
        recyclerview.adapter = adapter
        recyclerview.layoutManager = LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)
        return view
    }
}

Outro

  • RecyclerView가 좀 익숙해지니 ViewPager와 TabLayout은 처음 RecyclerView를 만들때보다는 편하게 구현할 수 있었다.
  • 백지에서 반복구현하면서 느낀점은 코딩은 머리와 손가락 모두에 익숙하게 만드는 과정이라는 생각이 들었다. RecyclerView의 경우도 처음 한번만 다른 사람의 코드를보고 따라쳤고, 그 이후에는 개념을 생각하며 막힐때만 찾아보는식으로 진행하다가 4번째즈음에는 다른사람코드를 보지않고도 구현할 수 있는정도까지 갈 수 있었다.
  • 현재 RecyclerView, ViewPager2, TabLayout 연동해서 구현하는 실습을 진행중에있다. 내일은 이 3가지를 한꺼번에 백지에서 구현하는 연습을 좀 해야겠다. 끗!
profile
잘부탁드립니다!

0개의 댓글