๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

[TIL] ๋‹ค์ด์–ผ๋กœ๊ทธ ์—๋”งํ…์ŠคํŠธ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋ฐ ๋ฒ„ํŠผ ํ™œ์„ฑํ™” ์ฝ”๋“œ ์ž‘์„ฑ

by ํ‚ค์œค 2024. 1. 18.

 

๐Ÿ“– Today I Learned

alert Dialog์— ์žˆ๋Š” EditText์˜ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ํ•˜๊ณ  ์‹ถ์—ˆ๊ณ  ๊ทธ ๊ฒฐ๊ณผ์— ๋”ฐ๋ผ ํ™•์ธ ๋ฒ„ํŠผ์„ ํ™œ์„ฑํ™” ์‹œํ‚ค๊ณ  ์‹ถ์—ˆ๋‹ค. ์•Œ๋ŸฌํŠธ ๋‹ค์ด์–ผ๋กœ๊ทธ์—์„œ๋Š” POSITIVE๋ฒ„ํŠผ๊ณผ NEGATIVE / NEUTRAL ๋ฒ„ํŠผ์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋–„๋ฌธ์— ์ด ๋ฒ„ํŠผ๋“ค์„ ํ™œ์„ฑํ™” ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์„ ๋ชฐ๋ผ์„œ ์ธํ„ฐ๋„ท์— ๊ฒ€์ƒ‰์„ ํ•ด๋ณด์•˜๋‹ค. 

์ฐพ์•„๋ณด๋‹ˆ ์ž๋ฐ” ๊ด€๋ จ ์ฝ”๋“œ๋งŒ ์ฐพ์„ ์ˆ˜ ์žˆ์—ˆ๊ณ  ๋„ˆ๋ฌด ๋ง‰ํ˜€์„œ ํŠœํ„ฐ๋‹˜๊ผ ๊ฐ€์„œ ์—ฌ์ญค๋ณด์•˜๊ณ  ๋ฒ„ํŠผ ํ™œ์„ฑํ™”๋ฅผ ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ๋ ค์ฃผ์…”์„œ ๋„์›€์„ ๋ฐ›์•˜๋‹ค.

builder.getButton(AlertDialog.BUTTON_POSITIVE).isEnabled = true

๋ฒ„ํŠผ ํ™œ์„ฑํ™” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์› ์ง€๋งŒ ๊ทธ๋ž˜๋„ ๊ฐ์ด ์žกํžˆ์ง€ ์•Š์•„์„œ ์ด ์ฝ”๋“œ๋ฅผ ๊นƒํ—ˆ๋ธŒ์— ๊ฒ€์ƒ‰ํ•ด์„œ ์ฝ”ํ‹€๋ฆฐ์„ ์‚ฌ์šฉํ•ด์„œ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ํ•œ ์˜ˆ์‹œ๋“ค์„ ์ฐพ์•„๋ณผ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

๋ช‡๋ช‡ ์˜ˆ์‹œ๋“ค์€ MVVM์„ ์ ์šฉํ•ด์„œ ์‘์šฉํ•˜๊ธฐ ์–ด๋ ค์› ๊ณ  ํ•œ 3,4๊ฐœ ์ฐพ์•„๋ณด๋ฉด์„œ ์ ์šฉํ•ด๋ณด๋‹ˆ ์Šฌ์Šฌ ๊ฐ์ด ์žกํ˜”๋‹ค.

listener ๋ณ€์ˆ˜์— ๊ฐ’์„ ๋„ฃ์ง€ ์•Š๊ณ  ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์› ๋‹ค. ์ง๊ด€์ ์ธ ๊ฒƒ ๊ฐ™๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊นƒํ—™์—์„œ ๋‹ค๋ฅธ ์‚ฌ๋žŒ ์ฝ”๋“œ ์ฐธ๊ณ ๋ฅผ ํ•˜๋ฉด์„œ ์ฝ”๋“œ ๊ณต

private fun addGroupBtn() {
        binding.ibtnAddContactAddGroup.setOnClickListener {
            val dialogView = layoutInflater.inflate(R.layout.dialog_add_group, null)

            val builder = AlertDialog.Builder(this)
                .setTitle(getString(R.string.dialog_add_group))
                .setMessage(getString(R.string.dialog_new_group))
                .setView(dialogView)
                .setIcon(R.mipmap.ic_launcher)
                .setPositiveButton(getString(R.string.dialog_confirm_add_group)) { _, _ ->
                    //startupViewModel.checkAndReset(token, layout.newPassword.text.toString())
                }
                .setNegativeButton(getString(R.string.dialog_cancel_add_group)) { dialog, _ ->
                    dialog.cancel()
                }
                .setCancelable(true)
                .show()
            builder.getButton(AlertDialog.BUTTON_POSITIVE).isEnabled = false

//            val alertDialog = builder.create()


            val editGroup = dialogView.findViewById<EditText>(R.id.et_dialog_add_group)


            editGroup?.addTextChangedListener(object : TextWatcher {
                override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {}

                override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
                    val text = editGroup.text.toString()
                    when {
                        text.isBlank() -> editGroup.error =
                            getString(AddContactErrorMessage.EMPTY_GROUP_NAME.message)

                        text.overlappingGroup() -> {
                            editGroup.error = null
                            builder.getButton(AlertDialog.BUTTON_POSITIVE).isEnabled = true

                        }

                        else -> editGroup.error = getString(AddContactErrorMessage.OVERLAPPING_GROUP_NAME.message)

                    }
                }

                override fun afterTextChanged(p0: Editable?) {}
            })

            builder.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener {
                newContactGroup = editGroup.text.toString()
                ContactDatabase.addGroup(newContactGroup)
                setGroupProvider()
                shortToastMessage(this, R.string.dialog_new_group_added)
                builder.dismiss()
            }


        }