Skip to content

Commit 5c711ae

Browse files
committed
[Feat] 구매한 스탬프만 다이어리 작성시 표시
1 parent 1339128 commit 5c711ae

File tree

3 files changed

+54
-40
lines changed

3 files changed

+54
-40
lines changed

app/src/main/java/com/experts/dada/DiaryMemo2Fragment.kt

Lines changed: 43 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -7,60 +7,73 @@ import android.view.View
77
import android.view.ViewGroup
88
import android.widget.ImageView
99
import android.widget.LinearLayout
10+
import androidx.lifecycle.lifecycleScope
1011
import com.experts.dada.databinding.FragmentDiaryMemo2Binding
12+
import kotlinx.coroutines.launch
1113

1214
class DiaryMemo2Fragment : Fragment() {
1315
lateinit var binding: FragmentDiaryMemo2Binding
1416
private var selectedItemId: Int? = null // 선택된 이미지의 ID를 저장할 변수
17+
private lateinit var stampDao: StampDao
1518

1619
override fun onCreateView(
1720
inflater: LayoutInflater, container: ViewGroup?,
1821
savedInstanceState: Bundle?
1922
): View? {
2023
binding = FragmentDiaryMemo2Binding.inflate(inflater, container,false)
2124

25+
// StampDao 초기화
26+
val diaryDatabase = DiaryDatabase.getDatabase(requireContext())
27+
stampDao = diaryDatabase.stampDao()
28+
2229
// 로딩된 데이터 적용
2330
binding.memo2Weight2Et.setText(AppData.diaryWeight)
2431
binding.memo2ContentEt.setText(AppData.diaryContent)
2532

26-
// 이미지 배열을 생성합니다.
27-
val imageResIds = (1..27).map { resources.getIdentifier("stamp$it", "drawable", context?.packageName) }
33+
// 구매된 스탬프를 불러와서 이미지 뷰를 동적으로 추가
34+
loadPurchasedStamps()
2835

29-
// LinearLayout에 이미지 뷰들을 동적으로 추가합니다.
30-
val linearLayout = binding.memo2StampHsv.getChildAt(0) as LinearLayout // LinearLayout을 참조
31-
imageResIds.forEachIndexed { index, resId ->
32-
val imageView = ImageView(requireContext())
33-
imageView.setImageResource(resId)
36+
return binding.root
37+
}
3438

35-
imageView.layoutParams = LinearLayout.LayoutParams(150, 150).apply {
36-
if (index != 0) marginStart = 20 // 여백 설정
37-
}
39+
private fun loadPurchasedStamps() {
40+
lifecycleScope.launch {
41+
val purchasedStamps = stampDao.getAllPurchasedStamps()
3842

39-
// 클릭 이벤트 처리
40-
imageView.setOnClickListener {
41-
// 기존에 선택된 이미지가 있다면, 배경을 투명으로 되돌림
42-
selectedItemId?.let { id ->
43-
val prevSelectedImage = linearLayout.getChildAt(id - 1) as ImageView
44-
prevSelectedImage.setBackgroundColor(android.graphics.Color.TRANSPARENT) // 배경을 투명으로
43+
// LinearLayout에 이미지 뷰들을 동적으로 추가합니다.
44+
val linearLayout = binding.memo2StampHsv.getChildAt(0) as LinearLayout // LinearLayout을 참조
45+
purchasedStamps.forEachIndexed { index, stamp ->
46+
val imageView = ImageView(requireContext())
47+
imageView.setImageResource(stamp.stampImg)
48+
49+
imageView.layoutParams = LinearLayout.LayoutParams(150, 150).apply {
50+
if (index != 0) marginStart = 20 // 여백 설정
4551
}
4652

47-
// 새로 클릭된 이미지의 ID를 저장하고, 배경을 회색으로 설정
48-
selectedItemId = index + 1
49-
imageView.setBackgroundColor(android.graphics.Color.LTGRAY) // 배경을 회색으로 설정
53+
// 클릭 이벤트 처리
54+
imageView.setOnClickListener {
55+
// 기존에 선택된 이미지가 있다면, 배경을 투명으로 되돌림
56+
selectedItemId?.let { id ->
57+
val prevSelectedImage = linearLayout.getChildAt(id - 1) as ImageView
58+
prevSelectedImage.setBackgroundColor(android.graphics.Color.TRANSPARENT) // 배경을 투명으로
59+
}
5060

51-
// 선택된 스탬프 id 저장
52-
AppData.diarySelectedItem = selectedItemId ?: 0
53-
}
61+
// 새로 클릭된 이미지의 ID를 저장하고, 배경을 회색으로 설정
62+
selectedItemId = stamp.id.toInt() // Stamp의 ID를 사용
63+
imageView.setBackgroundColor(android.graphics.Color.LTGRAY) // 배경을 회색으로 설정
5464

55-
// 만약 현재 이미지가 선택된 스탬프라면 배경을 회색으로 설정
56-
if (index + 1 == AppData.diarySelectedItem) {
57-
imageView.setBackgroundColor(android.graphics.Color.LTGRAY)
58-
selectedItemId = index + 1
59-
}
65+
// 선택된 스탬프 id 저장
66+
AppData.diarySelectedItem = selectedItemId ?: 0
67+
}
6068

61-
linearLayout.addView(imageView)
62-
}
69+
// 만약 현재 이미지가 선택된 스탬프라면 배경을 회색으로 설정
70+
if (stamp.id.toInt() == AppData.diarySelectedItem) {
71+
imageView.setBackgroundColor(android.graphics.Color.LTGRAY)
72+
selectedItemId = stamp.id.toInt()
73+
}
6374

64-
return binding.root
75+
linearLayout.addView(imageView)
76+
}
77+
}
6578
}
6679
}

app/src/main/java/com/experts/dada/StampDao.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@ interface StampDao {
1010
@Insert
1111
suspend fun insertStamp(stamp: Stamp)
1212

13-
@Query("SELECT * FROM stamps WHERE isPurchase = 0")
13+
@Query("SELECT * FROM stamps WHERE isPurchase = 0 ORDER BY id ASC")
1414
suspend fun getAllAvailableStamps(): List<Stamp> // 구매하지 않은 스탬프들만 조회
1515

16-
@Query("SELECT * FROM stamps WHERE isPurchase = 1")
16+
@Query("SELECT * FROM stamps WHERE isPurchase = 1 ORDER BY id ASC")
1717
suspend fun getAllPurchasedStamps(): List<Stamp> // 구매한 스탬프들만 조회
1818

1919
@Query("SELECT * FROM stamps WHERE id = :stampId")

app/src/main/java/com/experts/dada/StoreFragment.kt

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -56,11 +56,12 @@ class StoreFragment : Fragment() {
5656

5757
if (points >= totalCost) {
5858
points -= totalCost
59-
handlePurchase(selectedItems)
60-
binding.storeMypointTv.text = points.toString()
61-
adapter.clearSelection() // 선택 해제
62-
savePoints(sharedPreferences)
63-
Toast.makeText(requireContext(), "${totalCount}개 구매 완료! 남은 포인트: $points", Toast.LENGTH_SHORT).show()
59+
handlePurchase(selectedItems) {
60+
binding.storeMypointTv.text = points.toString()
61+
adapter.clearSelection() // 선택 해제
62+
savePoints(sharedPreferences)
63+
Toast.makeText(requireContext(), "${totalCount}개 구매 완료! 남은 포인트: $points", Toast.LENGTH_SHORT).show()
64+
}
6465
} else {
6566
Toast.makeText(requireContext(), "포인트가 부족합니다.", Toast.LENGTH_SHORT).show()
6667
}
@@ -76,15 +77,15 @@ class StoreFragment : Fragment() {
7677
}
7778
}
7879

79-
private fun handlePurchase(selectedItems: List<Stamp>) {
80+
private fun handlePurchase(selectedItems: List<Stamp>, onComplete: () -> Unit) {
8081
// 선택된 아이템들의 구매 상태 업데이트
8182
lifecycleScope.launch {
82-
// 선택된 아이템들의 isPurchase를 true로 업데이트
83-
for (stamp in selectedItems) {
83+
selectedItems.forEach { stamp ->
8484
stampDao.purchaseStamp(stamp.id) // DB에서 구매 처리
8585
}
8686
// 구매 후 StoreAdapter에서 DB를 갱신하여 UI 반영
8787
loadAvailableStamps() // DB에서 구매되지 않은 스탬프들을 새로 불러옴
88+
onComplete()
8889
}
8990
}
9091

0 commit comments

Comments
 (0)