이미 구현 된 RecyclerView가 있다는 전제하에서 진행됩니다.
1. Adapter 클래스로 가서 상속받고 있는 RecyclerView.Adapter의 제네릭 타입을 RecyclerView.ViewHolder로 변경
class TaskListAdapter (val context: Context?, private val taskListData: ArrayList<TaskData>) : RecyclerView.Adapter<RecyclerView.ViewHolder>(){
2. 필드에 기본 아이템과 Footer 아이템 구분을 위한 변수 선언
//footer 추가
private val TYPE_ITEM = 0
private val TYPE_FOOTER = 1
3. Footer 아이템으로 쓸 xml 파일 생성
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_height="70dp">
</LinearLayout>
4. Adapter 클래스로 가서 Footer ViewHolder 클래스 추가
//Footer ViewHolder
internal class FooterViewHolder(footerView: View?) :
RecyclerView.ViewHolder(footerView!!)
5. Adapter 클래스 안의 getItemViewType override 메소드를 추가
//ViewType 반환 하는 부분
override fun getItemViewType(position: Int): Int {
return if (position == taskListData.size) TYPE_FOOTER else TYPE_ITEM
}
6. Adapter 클래스 안의 getItemCount 메서드에서 반환하는 리스트 사이즈에 1을 더해준다
//Footer 추가로 사이즈에 1더함
override fun getItemCount(): Int = taskListData.size+1
7. onCreateViewHolder 내용을 변경해 준다.
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
//ViewHolder 한개일 때
// val view = LayoutInflater.from(context).inflate(R.layout.item_home,parent,false)
// return ItemViewHolder(view)
// //ViewHolder 여러개 - viewType(밑에 getItemViewType에서 줌)에 따라서 holder 다르게 반환
val holder: RecyclerView.ViewHolder
val view: View
if (viewType == TYPE_FOOTER) {
view = LayoutInflater.from(parent.context)
.inflate(R.layout.item_home_footer, parent, false)
holder = FooterViewHolder(view)
} else {
view = LayoutInflater.from(parent.context)
.inflate(R.layout.item_home, parent, false)
holder = ItemViewHolder(view)
}
return holder
}
8. onBindViewHolder의 내용도 변경해준다.
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
if (holder is ItemViewHolder) {
val item = taskListData[position]
holder.itemView.setOnClickListener {
Toast.makeText(it.context, "Clicked: ${item.title}", Toast.LENGTH_SHORT).show()
}
// Item을 하나, 하나 보여주는(bind 되는) 함수입니다.
// itemViewHolder.onBind(taskListData[position])
} else {
val itemViewHolder = holder as FooterViewHolder
}
}
'개발 공부 > Android' 카테고리의 다른 글
[Android Kotlin] 기본 Actionbar title 변경 + 뒤로가기 (0) | 2022.07.29 |
---|---|
[Android Kotlin]툴팁 구현 / Tooltip Library Balloon (0) | 2022.07.28 |
[Android Kotlin]Room 사용 시 Impl does not exist 이슈 (1) | 2020.10.24 |
[Android Java] 기본 Spinner 구현하기 (0) | 2020.06.21 |
[Android]안드로이드 스튜디오(Android Studio)에서 SHA-1값 확인 하는 방법 (0) | 2019.05.22 |