Skip to content

Commit

Permalink
[ADD/#17] 뷰모델을 이용하여 구현
Browse files Browse the repository at this point in the history
  • Loading branch information
0zlrlo committed Jan 3, 2023
1 parent 804173e commit 5535621
Show file tree
Hide file tree
Showing 3 changed files with 80 additions and 53 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,8 @@ import com.bumptech.glide.Glide
import com.lab.keyneez.data.entity.LikeData
import com.lab.keyneez.databinding.ItemLikeContentBinding

class LikeAdapter :
RecyclerView.Adapter<LikeAdapter.getViewHolder>() {
var data = mutableListOf<LikeData>()
class LikeAdapter : RecyclerView.Adapter<LikeAdapter.getViewHolder>() {
var data = listOf<LikeData>()

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): getViewHolder {
val binding =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.lab.keyneez.presentation.main.like

import android.os.Bundle
import android.view.View
import androidx.fragment.app.viewModels
import androidx.recyclerview.widget.GridLayoutManager
import com.lab.keyneez.R
import com.lab.keyneez.data.entity.LikeData
Expand All @@ -13,73 +14,46 @@ class LikeFragment : BindingFragment<FragmentLikeBinding>(R.layout.fragment_like
// private val likeViewModel by viewModels<LikeViewModel>()
lateinit var likeAdapter: LikeAdapter
val data = mutableListOf<LikeData>()
val viewModel: LikeViewModel by viewModels()
// liveData는 observer 패턴을 기반으로 하며 뷰모델과 뷰 간의 통신을 쉽게 한다.
// 또한 데이터 변경을 관찰하고 데이터를 자동으로 업데이트한다.

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
initLikeAdapter()
initLikeClickListener()
initLikeSaveClickListener()
initLikeSearchClickListener()
setupLikeData()
}

private fun initLikeSearchClickListener() {
binding.btnLikeSearch.setOnClickListener {
// 검색화면으로 이동
}
}

private fun initLikeClickListener() {
private fun initLikeSaveClickListener() {
binding.btnLikeSave.setOnClickListener {
binding.rvLikeContent.smoothScrollToPosition(0)
}
}

private fun setupLikeData() {
// ViewModel을 observe하는 부분을 사용하면 된다.
// 뷰모델에서 likelist가 바뀔 때마다 자동적으로 호출되어 바꿔줌
// viewLifecycleOwner 대신에 액티비티에서는 this를 사용해 준다.
// 상태 변경을 자동으로 알린다.
viewModel.likeList.observe(viewLifecycleOwner) { it ->
// 어댑터에서 mutablelist썼으면 뷰홀더에서도 mutablelist를 사용하고 어댑터에서 listOf를 썼으면 뷰홀더에서도 통일하기
likeAdapter.data = it
likeAdapter.notifyDataSetChanged()
}
}

private fun initLikeAdapter() {
likeAdapter = LikeAdapter()
binding.rvLikeContent.adapter = likeAdapter
binding.rvLikeContent.layoutManager = GridLayoutManager(activity, 2)
data.apply {
add(
LikeData(
background = R.drawable.img_like_background,
date = "12.4.12-10",
title = "청소년 영화관 할인"
)
)
add(
LikeData(
background = R.drawable.img_like_background,
date = "12.11-12.17",
title = "청소년 미술관 할인"
)
)
add(
LikeData(
background = R.drawable.img_like_background,
date = "12.18-12.24",
title = "청소년 공연장 할인"
)
)
add(
LikeData(
background = R.drawable.img_like_background,
date = "12.25-12.31",
title = "청소년 박물관 할인"
)
)
add(
LikeData(
background = R.drawable.img_like_background,
date = "1.1-1.7",
title = "청소년 서점 할인"
)
)
add(
LikeData(
background = R.drawable.img_like_background,
date = "1.8-1.14",
title = "청소년 강의 할인"
)
)

likeAdapter.data = data
likeAdapter.notifyDataSetChanged()
}
}

companion object {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,59 @@
package com.lab.keyneez.presentation.main.like

import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import com.lab.keyneez.R
import com.lab.keyneez.data.entity.LikeData

class LikeViewModel : ViewModel()
class LikeViewModel : ViewModel() {
// binding하는 방식으로 선언해 주기!
private val _likeList = MutableLiveData<List<LikeData>>()
val likeList: LiveData<List<LikeData>>
get() = _likeList

init {
// viewModel을 실행할 때 getLikeList를 제일 먼저 가져와 주세요
// init 함수는 매개변수가 없고 반환되는 값이 없는 특별한 함수이다.
// 생성자를 통해 인스턴스를 만들어 질 때 생성되는 함수이다.
// 생성자를 초기화할 수 있다.
getLikeList()
}

private fun getLikeList() {
// 코틀린은 자동적으로 타입을 추론해 주기 때문에 굳이 타입을 안 써줘도 된다.
val LikeDatas = listOf(
LikeData(
background = R.drawable.img_like_background,
date = "12.4.12-10",
title = "청소년 영화관 할인"
),
LikeData(
background = R.drawable.img_like_background,
date = "12.11-12.17",
title = "청소년 미술관 할인"
),
LikeData(
background = R.drawable.img_like_background,
date = "12.18-12.24",
title = "청소년 공연장 할인"
),
LikeData(
background = R.drawable.img_like_background,
date = "12.25-12.31",
title = "청소년 박물관 할인"
),
LikeData(
background = R.drawable.img_like_background,
date = "1.1-1.7",
title = "청소년 서점 할인"
),
LikeData(
background = R.drawable.img_like_background,
date = "1.8-1.14",
title = "청소년 강의 할인"
)
)
_likeList.value = LikeDatas
}
}

0 comments on commit 5535621

Please sign in to comment.