카테고리 없음

[Android] 코틀린 kotlin 다이얼로그 만들기

플래시🦥 2023. 4. 3. 15:23
반응형

기본 

버튼을 눌렀을 때 다이얼로그가 뜨는 방법은 아래와 같다. 

edit()는 onclick 함수이다. 

fun edit(view: View) {
    val builder = AlertDialog.Builder(this)
    builder.setTitle("타이틀 입니다.")
        .setMessage("메세지 내용 입니다.")
        .setPositiveButton("확인",
            DialogInterface.OnClickListener { dialog, id ->
            })
        .setNegativeButton("취소",
            DialogInterface.OnClickListener { dialog, id ->
            })
    builder.show()
}

이렇게 하면 아래와 같은 결과를 얻는다. 

버튼을 클릭하면 

DialogInterface안에 원하는 작업을 추가해 주면 된다. 

 

커스텀

 

커스텀할 dialog를 구현하기 위해 dialog.kt 와 activity_dialog.xml을 만들었다. 

activity_dialog.xml에는 원하는 뷰를 구성하면 된다. 

 

dialog.kt에 작성해야 할 것은 

1. activity_dialog.xml 뷰바인딩 

2. 다이얼로그 구성

3. listener 선언 및 setOnOKClickedListener 메서드 작성 

이다. 

class dialog(private val context: AppCompatActivity) {
	
    //1번 뷰바인딩
    val binding by lazy { ActivitySalrayEditDialogBinding.inflate(context.layoutInflater) }
    
    //다이얼로그 선언 및 listener선언
    private val dlg = Dialog(context)
    private lateinit var listener : MyDialogOKClickedListener

	//다이얼로그 생성
    fun show(salary : String) {

        dlg.requestWindowFeature(Window.FEATURE_NO_TITLE)   //타이틀바 제거
        dlg.setContentView(binding.root)     //다이얼로그에 사용할 xml 파일을 불러옴
        dlg.setCancelable(false)    //다이얼로그의 바깥 화면을 클릭시 종료x

        binding.salaryText.setText(salary) //전달 받은 텍스트를 표시

        //save 버튼 동작
        binding.saveButton.setOnClickListener {
        	//액티비티에 결과 전달 
            listener.onOKClicked(binding.salaryText.text.toString())
            dlg.dismiss()
        }

        //cancel 버튼 동작
        binding.cancelButton.setOnClickListener {
            dlg.dismiss()
        }
        dlg.show()
    }

    fun setOnOKClickedListener(listener: (String) -> Unit) {
        this.listener = object: MyDialogOKClickedListener {
            override fun onOKClicked(content: String) {
                listener(content)
            }
        }
    }

    interface MyDialogOKClickedListener {
        fun onOKClicked(content : String)
    }
}

 

그리고 MainActivity에서는 

 

fun editSalary(view: View) {

    val dlg = dialog(this)
    dlg.setOnOKClickedListener{ content ->
        binding.mySalary.text = content
    }
    dlg.show(binding.mySalary.text.toString())
}

이렇게 다이얼로그 요청을 보낼 수 있다. 

 

결과>>

1100은 메인액티비티에서 전달받은 값이고, 값을 수정해서 저장하면 메인액티비티의 textview 바뀌는 다이얼로그를 구현해 보았다. 

 

728x90
반응형