본문 바로가기
개발

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

by kks950115 2024. 1. 19.
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
반응형

댓글