🐱 With All My Animal 🐶
💡 [ 20일차 11/6일 ] 💡
📌 오늘의 기술면접 질문 Q&A
1) 코틀린의 장점
2) Intent가 무엇인가요?
개발자가 어떤 의도를 가지고 메서드를 실행할 것인지를 인텐트 담아서 안드로이드에 전달하면 해당 인텐트를 해석하고 실행한다.
안드로이드 4대 컴포넌트 중 사용자와 상호작용을 담당하는 인터페이스인 액티비티는 이 Intent를 통해 다른 Application의 액티비티를 호출 할 수 있습니다.
📌 에러 수정
binding.btnBehaviorAdd.setOnClickListener {
val chipName = binding.etvMypageBehaviorTag.text.toString()
if (chipName.isNotBlank()) {
// 태그 제한 개수 설정
val maxChips = 3
class MypageBehavior : AppCompatActivity() {
return@setOnClickListener
}
var isDuplicate = false
for (i in 0 until binding.chipGroup.childCount) {
val chip = binding.chipGroup.getChildAt(i) as Chip
if (chip.text.toString() == chipName) {
isDuplicate = true
break
}
}
if (isDuplicate) {
Toast.makeText(this, "중복된 태그가 있습니다.", Toast.LENGTH_SHORT).show()
} else {
binding.chipGroup.addView(Chip(this).apply {
text = chipName
isCloseIconVisible = true
setOnCloseIconClickListener {
binding.chipGroup.removeView(this)
tagListBehavior.remove(chipName)
}
chipBackgroundColor = ColorStateList.valueOf(Color.WHITE)
val typeface: Typeface? =
class MypageBehavior : AppCompatActivity() {
}
}
}
...
private fun addChip(chipName: String) {
var isDuplicate = false
for (i in 0 until binding.chipGroup.childCount) {
val chip = binding.chipGroup.getChildAt(i) as Chip
if (chip.text.toString() == chipName) {
isDuplicate = true
break
}
}
if (!isDuplicate) {
binding.chipGroup.addView(Chip(this).apply {
text = chipName
isCloseIconVisible = true
setOnCloseIconClickListener {
binding.chipGroup.removeView(this)
tagListBehavior.remove(chipName)
}
chipBackgroundColor = ColorStateList.valueOf(Color.WHITE)
val typeface: Typeface? =
ResourcesCompat.getFont(this@MypageBehavior, R.font.cafe24)
this.typeface = typeface
})
tagListBehavior.add(chipName)
} else {
Toast.makeText(this, "중복된 태그가 있습니다.", Toast.LENGTH_SHORT).show()
}
}
}
오류가 생긴 이유
-> 중복된 태그가 계속 추가되었던 것
(원인: addChip 함수를 여러 번 호출하고 중복 태그를 여러 번 추가했던 것, 추가버튼 클릭 시 중복 확인이 두 번 진행되었던 것)
해결 방안
-> 중복이 아닌 경우에만 addChip 함수 내에서만 호출하여 태그 추가 (중복 확인 X)
-> 추가 버튼 클릭 시 태그를 추가 전 중복 확인
해결 된 코드
binding.btnBehaviorAdd.setOnClickListener {
val chipName = binding.etvMypageBehaviorTag.text.toString().trim()
if (chipName.isNotBlank()) {
val maxChips = 3
if (binding.chipGroup.childCount >= maxChips) {
Toast.makeText(this, "최대 $maxChips 개의 태그만 추가할 수 있습니다.", Toast.LENGTH_SHORT)
.show()
return@setOnClickListener
}
val isDuplicate = tagListBehavior.any { it.equals(chipName, ignoreCase = true) }
if (isDuplicate) {
Toast.makeText(this, "중복된 태그가 있습니다.", Toast.LENGTH_SHORT).show()
} else {
binding.chipGroup.addView(Chip(this).apply {
text = chipName
isCloseIconVisible = true
setOnCloseIconClickListener {
binding.chipGroup.removeView(this)
}
chipBackgroundColor = ColorStateList.valueOf(Color.WHITE)
val typeface: Typeface? =
ResourcesCompat.getFont(this@MypageBehavior, R.font.cafe24)
this.typeface = typeface
tagListBehavior.add(chipName)
})
Toast.makeText(this, "태그가 추가되었습니다.", Toast.LENGTH_SHORT).show()
binding.etvMypageBehaviorTag.setText("")
}
} else {
Toast.makeText(this, "태그를 입력해주세요", Toast.LENGTH_SHORT).show()
}
}
}
...
private fun addChip(chipName: String) {
binding.chipGroup.addView(Chip(this).apply {
text = chipName
isCloseIconVisible = true
setOnCloseIconClickListener {
binding.chipGroup.removeView(this)
tagListBehavior.remove(chipName)
}
chipBackgroundColor = ColorStateList.valueOf(Color.WHITE)
val typeface: Typeface? =
ResourcesCompat.getFont(this@MypageBehavior, R.font.cafe24)
this.typeface = typeface
})
tagListBehavior.add(chipName)
}
}
퍼가요 🐶