이번 시간에는 ToDo List 만들기 두 번째 시간 할 일 화면과 어댑터 클래스를 만들어 보겠습니다.
이전 포스팅은 아래 링크를 들어가시면 됩니다.
2022.09.15 - [안드로이드] - [안드로이드 코틀린] SQLite ToDo List 만드는 방법 part2 - 할 일 화면과 어댑터 클래스
- 설명 -
1. 할 일 목록을 보여주는 화면
2. 할 일을 보여주는 CheckBox
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="16dp"
android:layout_marginVertical="8dp"
app:cardCornerRadius="8dp"
app:cardElevation="4dp">
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="8dp">
<CheckBox
android:id="@+id/m_check_box"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:buttonTint="@android:color/holo_green_dark"
android:text="This is Sample Task"/>
</RelativeLayout>
</androidx.cardview.widget.CardView>
- 설명 -
1. 데이터와 화면을 연결해주는 어댑터 클래스
2. constructor(db: ToDoDB) : this()
생성자. 어댑터 생성 시 db 정보 받음
3. onCreateViewHolder
화면 설정
4. onBindViewHolder
데이터 설정
5. getItemCount()
데이터 개수 가져오는 함수
6. setTasks
할 일 리스트에 담는 함수
7. removeItem
할 일 삭제하는 함수
class ToDoAdapter(): RecyclerView.Adapter<ToDoAdapter.ViewHolder>() {
lateinit var mDb: ToDoDB
constructor(db: ToDoDB): this(){
mDb = db
}
var todoList: ArrayList<ToDoModel> = ArrayList()
/**
* 화면 설정
*/
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val inflater: LayoutInflater = LayoutInflater.from(parent.context)
val view: View = inflater.inflate(R.layout.task_item, parent, false)
return ViewHolder(view)
}
/**
* 데이터 설정
*/
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
//아이템 담기
val item: ToDoModel = todoList[position]
//할일 내용
holder.mCheckBox.text = item.task
//상태값이 0이 아니면 체크
holder.mCheckBox.isChecked = toBooelan(item.status)
//체크박스 체크 이벤트
holder.mCheckBox.setOnCheckedChangeListener(object: CompoundButton.OnCheckedChangeListener{
override fun onCheckedChanged(comButton: CompoundButton?, isCheck: Boolean) {
//체크 상태면 1 아니면 0
if(isCheck){
mDb.updateStatus(item.id, 1)
}else{
mDb.updateStatus(item.id, 0)
}
}
})
}
/**
* 상태값으로 체크상태 알아내기
* 상태값이 0이 아니면 true 0이면 false
*/
private fun toBooelan(n: Int) = n != 0
/**
* 데이터 갯수 가져오기
*/
override fun getItemCount(): Int = todoList.size
/**
* 할 일 목록 담기
*/
fun setTask(todoList: ArrayList<ToDoModel>){
this.todoList = todoList
notifyDataSetChanged()
}
/**
* 할 일 삭제
*/
fun removeTask(position: Int){
todoList.removeAt(position)
notifyItemRemoved(position)
}
class ViewHolder(view: View): RecyclerView.ViewHolder(view){
val mCheckBox: CheckBox = view.findViewById(R.id.m_check_box)
}
}
2022.09.13 - [안드로이드] - [안드로이드 코틀린] 액티비티(Activity) 뒤로 가기 버튼 만드는 방법
2022.09.08 - [안드로이드] - [안드로이드 코틀린] 달력(DatePicker) 코드에서 호출하는 방법
2022.09.02 - [안드로이드] - [안드로이드 코틀린] SeekBar RGB 글씨 색상 조절 만드는 방법
[안드로이드 코틀린] RecyclerView 홀수 행, 짝수 행 별 색상 다르게 하는 방법 (0) | 2022.09.19 |
---|---|
[안드로이드 코틀린] SQLite ToDo List 만드는 방법 part3 - 메인 화면과 메인 코드 (2) | 2022.09.16 |
[안드로이드 코틀린] SQLite ToDo List 만드는 방법 part1 - Data 클래스와 DB 클래스 (0) | 2022.09.14 |
[안드로이드 코틀린] 액티비티(Activity) 뒤로가기 버튼 만드는 방법 (1) | 2022.09.13 |
[안드로이드 코틀린] HTTP 통신 Volley 사용법 part2 - JSON 요청 및 파싱 (0) | 2022.09.12 |
댓글 영역