์ฑ์ ์ ์ํ ๋ ๋น ์ง ์ ์๋ ๊ธฐ๋ฅ ์ค ํ๋์ธ "์ข์์"๋ฒํผ, ์๊ฐ๋ณด๋ค ๋ณต์กํ ์ฝ๋ ๊ตฌ์ฑ์ด์ง๋ง ์ฐจ๊ทผ์ฐจ๊ทผ ํด์ ์ฑ๊ณตํ์ต๋๋ค. ํด๋ฆญํ ์์ดํ ์ ์์ธ ํ์ด์ง์์ "์ข์์" ์ํ๋ฅผ ๋ณ๊ฒฝํ๊ณ ๋์์์ ํด๋น ๋ณ๊ฒฝ์ ๋ฉ์ธ ์กํฐ๋นํฐ์์ ๋ฐ์ํ๋ ๊ณผ์ ๋ค์ ์ ๋ฆฌํด ๋ณด๊ฒ ์ต๋๋ค.
๐ ์ ์ฒด์ฝ๋ github
๋ฆฌ์ฌ์ดํด๋ฌ๋ทฐ ์์ดํ ํด๋ฆญ -> ํด๋ฆญ๋ ๋ฐ์ดํฐ ์์ธํ์ด์ง๋ก ๋๊ฒจ์ฃผ๊ธฐ -> ์์ธํ์ด์ง์์ ์ข์์ ์์ด์ฝ ํด๋ฆญ -> ์ข์์ ์์ด์ฝ, ์ข์์ ์นด์ดํธ ๋ฐ์ดํฐ ๋ฉ์ธ์ผ๋ก ๋๊ฒจ์ฃผ๊ธฐ -> ๋ค๋ก๊ฐ๊ธฐ ๋ฒํผ์ ๋๋ฅด๋ฉด ํด๋น ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋๋ก ๋ฐ์์ ๋ฉ์ธ์ ๋์ผํ๊ฒ ๋๊ฒจ์ฃผ๊ธฐ
adapter.itemClick = object : MyAdapter.ItemClick {
override fun onClick(view: View, position: Int) {
// ํด๋ฆญํ ์์ดํ
์ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ
val clickedItem = dataList[position]
// ๋ํ
์ผ ์กํฐ๋นํฐ๋ก ๋ฐ์ดํฐ ์ ๋ฌ
val intent = Intent(this@MainActivity, DetailActivity::class.java)
intent.putExtra("likePosition", position) // ์์ดํ
์ ์์น ์ ๋ณด ์ ๋ฌ
intent.putExtra("myItem", clickedItem) // ํด๋ฆญํ ์์ดํ
๋ฐ์ดํฐ ์ ๋ฌ
activityResultLauncher.launch(intent) // ๋ํ
์ผ ์กํฐ๋นํฐ ์คํ
}
}
activityResultLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
if (it.resultCode == RESULT_OK) {
val likePosition = it.data?.getIntExtra("likePosition", 0) as Int
val isLiked = it.data?.getBooleanExtra("isLiked", false) as Boolean
// ๋ฐ์ดํฐ ์
๋ฐ์ดํธ
if (isLiked) {
dataList[likePosition].isLiked = true
dataList[likePosition].likeCount += 1
} else {
if (dataList[likePosition].isLiked) {
dataList[likePosition].isLiked = false
dataList[likePosition].likeCount -= 1
}
}
// ์ด๋ํฐ์ ๋ณ๊ฒฝ ์ฌํญ ์๋ฆฌ๊ธฐ
adapter.notifyItemChanged(likePosition)
}
}
DetailActivity๋ ์์ดํ ์ ์์ธ ์ ๋ณด๋ฅผ ํ์ํ๊ณ , ์ข์์(๊ด์ฌ) ์ํ๋ฅผ ํ ๊ธํ๋ฉฐ, ๋ค๋ก๊ฐ๊ธฐ ๋ฒํผ์ ํตํด ๋ฉ์ธ ์กํฐ๋นํฐ๋ก ๋์๊ฐ ๋ ํด๋น ๋ฐ์ดํฐ๋ฅผ ๋ฐํํฉ๋๋ค.
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// XML ๋ ์ด์์๊ณผ ์ฐ๊ฒฐํ์ฌ ํ๋ฉด ์ค์
binding = ActivityDetailBinding.inflate(layoutInflater)
setContentView(binding.root)
// MainActivity๋ก๋ถํฐ ์ ๋ฌ๋ MyItem ๊ฐ์ฒด ๋ฐ๊ธฐ
val receivedItem = intent.getParcelableExtra<MyItem>("myItem")
// MyItem ๊ฐ์ฒด๊ฐ ์ ๋ฌ๋์์ ๋๋ง ๋ฐ์ดํฐ๋ฅผ ํ๋ฉด์ ์ค์
receivedItem?.let {
// ํ๋ฉด์ ๋ฐ์ดํฐ ์ค์
binding.detailImage.setImageResource(it.listImage)
binding.nickname.text = it.nickname
binding.address.text = it.listAddress
binding.detailTitle.text = it.listTitle
binding.detailContent.text = it.detailContent
binding.price.text = it.listPrice
// ์ข์์(๊ด์ฌ) ์ํ ์ค์
isLiked = it.isLiked == true
binding.detailLikeIcon.setImageResource(if (isLiked) {R.drawable.love_filled} else {R.drawable.love_empty})
// ๋ค๋ก๊ฐ๊ธฐ ๋ฒํผ ํด๋ฆญ ์ ์ข
๋ฃ
binding.backButton.setOnClickListener {
exit()
}
// ์ข์์(๊ด์ฌ) ์์ด์ฝ ํด๋ฆญ ์ ํ ๊ธํ๊ณ ์ค๋ต๋ฐ ํ์
binding.detailLikeIcon.setOnClickListener {
isLiked = if (!isLiked) {
binding.detailLikeIcon.setImageResource(R.drawable.love_filled)
Snackbar.make(binding.constLayout, "๊ด์ฌ ๋ชฉ๋ก์ ์ถ๊ฐ๋์์ต๋๋ค.", Snackbar.LENGTH_SHORT).show()
isLiked = true
} else {
binding.detailLikeIcon.setImageResource(R.drawable.love_empty)
isLiked = false
}
}
}
}
private fun exit() {
// MainActivity๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ๊ธฐ ์ํ Intent ์์ฑ
val likePosition = intent.getIntExtra("likePosition", 0)
val intent = Intent(this, MainActivity::class.java).apply {
putExtra("likePosition", likePosition)
putExtra("isLiked", isLiked)
}
// ๊ฒฐ๊ณผ ์ค์ ๋ฐ ์กํฐ๋นํฐ ์ข
๋ฃ
setResult(RESULT_OK, intent)
if (!isFinishing) finish()
}
override fun onBackPressed() {
exit()
}
์ค ๊น๋ํ๊ฒ ๊ตฌํํ์ ๊ฑฐ ๊ฐ์์. ์ ๋ ์๋๋ ๋ชปํด๋ดค๋๋ฐ ๋์์ด ๋ง์ด ๋๊ฒ ์ด์! ๊ฒํด๊ฐ๊ฒ ์ต๋๋ค~~