개발

안드로이드 코틀린 : 프래그먼트에서 다이얼로그 확인 버튼 누르면 안닫히게 (다이얼로그 유지하기)

kks950115 2024. 1. 19. 21:53
728x90

다이얼로그 안에서 유효성 검사를 하려는데 확인 버튼을 누르면 바로 닫힌다. 

닫히면 안되는데....

아래는 검색해서 얻은 답.

 

binding.ivAddContact.setOnClickListener {//

    val alertDialog : AlertDialog

    var builder = AlertDialog.Builder(context)
    builder.setTitle("연락처 추가하기")

    var view = layoutInflater.inflate(R.layout.dialog_addcontact, null)
    builder.setView(view)

    var listener = DialogInterface.OnClickListener { p0, p1 ->
    		//보통이라면 여기에 코드가 있지만 비어놓고 아래에 구현을 한다.
        }

    builder.setPositiveButton("추가하기", listener)
    builder.setNegativeButton("취소", null)

    alertDialog = builder.create()
    alertDialog.show()

	//아래 코드를 추가하고 그 안에서 구현했다.
    alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener {p0 ->
        var closeDialog = false
        //val alert = p0 as AlertDialog
        val name = view.findViewById<EditText>(R.id.et_dialog_name)
        val phone = view.findViewById<EditText>(R.id.et_dialog_phone)
        val email = view.findViewById<EditText>(R.id.et_dialog_email)

        if(name.text.isEmpty() || !isValidname(name.text.toString())){
            Toast.makeText(context,"이름이 유효하지 않습니다.", Toast.LENGTH_SHORT).show()
            Log.d("test", "이름칸 ${name.text}")
            return@setOnClickListener
        } else if(phone.text.isEmpty() || !isValidPhoneNumber(phone.text.toString())){
            Toast.makeText(context, "번호가 유효하지 않습니다", Toast.LENGTH_SHORT).show()
            return@setOnClickListener
        } else if(!isValidEmail(email.text.toString())){
            Toast.makeText(context, "메일이 유효하지 않습니다.", Toast.LENGTH_SHORT).show()
            return@setOnClickListener
        }

        if(name.text.isNotEmpty() && isValidname(name.text.toString()) && phone.text.isNotEmpty() && isValidPhoneNumber(phone.text.toString()) ){
            closeDialog=true
            val id = createId(name.text.toString())
            Data.member.add(
                Member(
                    id,
                    R.drawable.person,
                    name.text.toString(),
                    if(email.text.isNotEmpty()) email.text.toString() else "",
                    "신규회원",
                    0,
                    phone.text.toString(),
                    mutableListOf(),
                    mutableListOf(),
                    mutableListOf()
                )
            )
            Data.member[0].friendsPhoneNumbersId.add(id)
        }



        if (closeDialog) { //자동으로 닫히지 않기 때문에 수동으로 닫아줘야한다.
            alertDialog.dismiss()
        }

    }
}//

 

다이얼로그의 버튼 안에는 내부적으로 .dismiss()가 있어서 자동으로 닫힌다고 한다. 

dismiss()가 없는 버튼을 다시 만들어서 닫히지 않는 것이다. 물론 닫을려면 수동으로 dismiss()를 호출해야한다. 

728x90
반응형