diff --git a/app/src/main/java/com/lab/keyneez/presentation/main/like/LikeAdapter.kt b/app/src/main/java/com/lab/keyneez/presentation/main/like/LikeAdapter.kt index 66789af..8f2d89d 100644 --- a/app/src/main/java/com/lab/keyneez/presentation/main/like/LikeAdapter.kt +++ b/app/src/main/java/com/lab/keyneez/presentation/main/like/LikeAdapter.kt @@ -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() { - var data = mutableListOf() +class LikeAdapter : RecyclerView.Adapter() { + var data = listOf() override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): getViewHolder { val binding = diff --git a/app/src/main/java/com/lab/keyneez/presentation/main/like/LikeFragment.kt b/app/src/main/java/com/lab/keyneez/presentation/main/like/LikeFragment.kt index 3ee0632..0c4fb02 100644 --- a/app/src/main/java/com/lab/keyneez/presentation/main/like/LikeFragment.kt +++ b/app/src/main/java/com/lab/keyneez/presentation/main/like/LikeFragment.kt @@ -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 @@ -13,73 +14,46 @@ class LikeFragment : BindingFragment(R.layout.fragment_like // private val likeViewModel by viewModels() lateinit var likeAdapter: LikeAdapter val data = mutableListOf() + 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 { diff --git a/app/src/main/java/com/lab/keyneez/presentation/main/like/LikeViewModel.kt b/app/src/main/java/com/lab/keyneez/presentation/main/like/LikeViewModel.kt index b26f24a..666a60b 100644 --- a/app/src/main/java/com/lab/keyneez/presentation/main/like/LikeViewModel.kt +++ b/app/src/main/java/com/lab/keyneez/presentation/main/like/LikeViewModel.kt @@ -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>() + val likeList: LiveData> + 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 + } +}