개발
안드로이드 코틀린 : 프래그먼트에서 다이얼로그 확인 버튼 누르면 안닫히게 (다이얼로그 유지하기)
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
반응형