반응형
알림창 띄우기!
코드!
// 저장소 경로 받앙괴.
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가 필요한가봄 ㅇ.ㅇ
반응형
'안드로이드' 카테고리의 다른 글
[안드로이드] Permission - 권한 확인하기(checkSelfPermission)(feat. Kotlin) (0) | 2023.01.27 |
---|---|
[Kotlin] CSV 파일 읽고 쓰기 (0) | 2023.01.15 |
[안드로이드] 안드로이드 스튜디오 : Git Push오류 발생 (0) | 2022.11.21 |
[안드로이드] mobile navigation : popUpTo, popUpToInclusive, 이전 Fragment 중복 안되게 설정 (0) | 2022.11.18 |
[안드로이드] DatePickerDialog : 날짜 선택하기 (Kotlin) (0) | 2022.10.27 |
댓글