View
오늘의 알아 볼것
요즘 바뻐서 TIL을 쓸 여유가 없었다.
과제 및 프로젝트가 겹쳐서....ㅠㅠ
그래도 오늘 여유가 되서 저번에 쓰려고 해던 참조 함수를 직접 사용하는 예제에 대해서 글을 포스트한다.
내가 배운 것을 정리하기 위해서!!
참조 함수
우리가 흔히 RecyclerView의 item에 대해 클릭 이벤트를 작성하기 위해서는 interface를 많이 사용한다.
하지만 만약에 각각의 똑같은 item에 대해서 한 가지 이벤트가 발생하면 참조 변수를 사용하여 간단히 구현할 수 있다.
자 알아보자
아래코드는 Activity,Fragment에서 사용되는 실제클릭에 대한 이벤트 코드이다.
private fun setCategoryAdapter() {
categoryAdapter = CategoryAdapter(::onCategoryItemClick)
val categoryManager =
LinearLayoutManager(requireActivity(), LinearLayoutManager.VERTICAL, false)
binding.rv.apply {
layoutManager = categoryManager
adapter = categoryAdapter
scrollToPosition(0)
}
}
private fun onCategoryItemClick(question: Question) {
val action =
CategoryFragmentDirections.actionGlobalWriteAnswerFragment(question.id)
findNavController().navigate(action)
}
코드를 보면 위에서 adapter를 세팅해주는데 거기에 매개변수를 함수를 참조한 것을 볼 수 있다. 해당 코드 처럼 아래에 실제 사용되는 부분을 작성하고 adapter를 세팅하는 곳에 해당 함수처럼 참조 해주면된다.
물론 이렇게 되면 adapter 부분이 어떻게 구현되는지 궁금할 것이다.
아래 코드는 adapter 부분이다.
class CategoryAdapter(
private val onCategoryItemClick: (quest: Question) -> Unit
) : RecyclerView.Adapter<CategoryViewHolder>() {
private var questionList = listOf<Question>()
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CategoryViewHolder {
return CategoryViewHolder.from(parent, onCategoryItemClick)
}
override fun getItemCount(): Int = questionList.size
override fun onBindViewHolder(holder: CategoryViewHolder, position: Int) {
holder.bind(questionList[position])
}
fun setData(movies: List<Question>) {
this.questionList = movies
notifyDataSetChanged()
}
}
해당 부분을 보면 참조 함수를 할당하기 위해서 매개변수를 선언 해준부분이 있다.
저렇게 받은 참조함수를 아래 VeiwHolder의 From에 넣어주면된다.
아래코드는 해당 ViewHolder 코드로 해당 From에서 함수를 어떻게 받는지 볼 수 있다.
class CategoryViewHolder(
private val binding: ItemCategoryBinding,
private val onCategoryItemClick: (question: Question) -> Unit
) : RecyclerView.ViewHolder(binding.root) {
init {
binding.root.setOnClickListener {
onCategoryItemClick(binding.question ?: return@setOnClickListener)
}
}
fun bind(question: Question) {
binding.question = question
}
companion object {
fun from(
parent: ViewGroup,
onCategoryItemClick: (question: Question) -> Unit
): CategoryViewHolder {
val layoutInflater = LayoutInflater.from(parent.context)
val binding = ItemCategoryBinding.inflate(layoutInflater, parent, false)
return CategoryViewHolder(binding, onCategoryItemClick)
}
}
}
아래 from을 보면 똑같이 함수를 매개변수로 받을 수 있개 형식을 같게 해주고 실제 ViewHolder 생성부에 넣어준 것을 볼 수 있다.
그런 후 위에서 직접 사용하는 것을 볼 수 있다.
자 오늘은 간단히 실제 참조함수를 사용하는 예제를 가져와봤다.!!
열심히 하자!
'TIL > 스터디' 카테고리의 다른 글
.gitignore (0) | 2024.04.19 |
---|---|
앱 배포시 apk -> aab로 왜 바꿀까? (0) | 2024.04.15 |
코틀린 함수 참조 (0) | 2024.03.29 |
TabLayout 스크롤 감지 (Viewpager안썻을 때) (0) | 2024.03.28 |
LinearLayoutMananger(RecyclerView 스크롤 제어) (0) | 2024.03.27 |