안드로이드

[안드로이드] AlertDialog : yes, no창 띄우기. 확인창 띄우기, 알림창 띄우기!(Kotlin)

디벨로펄 2023. 1. 14.
반응형

알림창 띄우기!

코드!

// 저장소 경로 받앙괴.
val path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).absolutePath

// 여기서 MainActivity@this로 해주어야 한다는 점 잊지 말자
val alertDialog: AlertDialog? = MainActivity@ this.let {
    val builder = AlertDialog.Builder(it)
    builder.apply {
        setTitle(R.string.download_dialog_title) // 제목 설정
        setMessage(R.string.download_dialog) // message 설정
        // yes 버튼일 때의 action 설정.
        setPositiveButton(R.string.ok_kr
        ) { _, _ ->
            FileOutputStream("$path/filename.csv").apply { writeCsv(rows) }
            println("$path/filename.csv")
        }
        // no 버튼 일 때의 action설정.
        setNegativeButton(R.string.cancel_kr
        ) { _, _ ->
            println("no clicked")
        }
    }
    // Create the AlertDialog
    builder.create()
}
// 실제 activity에 보여주기.
alertDialog?.show()

이슈 : AlertDialog를 applicationContext에 붙이려 했음. → MainActivity@this로 해줘야함.

Unable to add window -- token null is not valid; is your activity running?

그럼 위 오류 해결됨.

 

ApplicationContext : application life-cycle을 따르며 어플리케이션 실행되어 종료될 때까지 동일 객체 참조.

-  applicationContext

ActivityContext : activity life-cycle 따르며 activity가 onDestory될 때 context는 사라지게 된다. 

println(applicationContext)
println(baseContext)
println(MainActivity@this)

I/System.out: android.app.Application@2284ace
I/System.out: androidx.appcompat.view.ContextThemeWrapper@b46cdef
I/System.out: com.example.myapplication.MainActivity@c987641

AlertDialog는 실제로 붙일 Activity? Context?가 필요함. 그래서 MainActivity@this가 필요한가봄 ㅇ.ㅇ

반응형

댓글