다이얼로그

두리두두·2024년 3월 23일

Android

목록 보기
6/25
  • 여러 다이얼로그를 만들어보자
  • 클릭이벤트는 각 버튼마다 DialogInterface를 구현해서 만들거나, 따로 이벤트 핸들러를 구현해두고 사용할 수 있다.

1. 기본 알럿

  • AlertDialog.Builder()
  • 빌더 안에서 타이틀, 내용, 버튼 등 설정
  • 각 버튼은 클릭 리스너를 연결할 수 있음

1) 리스너 연결 안한 기본

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        val binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
        binding.introButton2?.setOnClickListener {
            AlertDialog.Builder(this).run{
                setTitle("test")
                setMessage("끄겟습니까?")
                setPositiveButton("네", null)
                setNegativeButton("아녕", null)
                setNeutralButton("흠..", null)
                show()
            }
        }
  ...

2) null 자리에 리스너를 연결해보자

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        val binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
        binding.introButton2?.setOnClickListener {
            AlertDialog.Builder(this).run{
                setTitle("test")
                setMessage("끄겟습니까?")
                setPositiveButton("네", object : DialogInterface.OnClickListener{
                    override fun onClick(p0: DialogInterface?, p1: Int) {
                        Log.d("=============", "YESSSSSSS")
                    }
                })
                setNegativeButton("아녕", object : DialogInterface.OnClickListener{
                    override fun onClick(p0: DialogInterface?, p1: Int) {
                        Log.d("=============", "NOOOOOO")
                    }
                })
                setNeutralButton("흠..", null)
                show()
            }
        }
  • DialogInterface의 onClickListener로 구현할 수 있다.

3) 이벤트 핸들러를 따로 빼서 만들기

  • listener라는 이벤트 핸들러 하나에서 분기처리를 해둔 후 여러 버튼에서 사용할 수 있다.
        binding.introButton2?.setOnClickListener{
            AlertDialog.Builder(this).run {
                val listener = object  : DialogInterface.OnClickListener {
                    override fun onClick(p0: DialogInterface?, p1: Int) {
                        when (p1) {
                            DialogInterface.BUTTON_POSITIVE ->
                                Log.d("YES", "YES")

                            DialogInterface.BUTTON_NEGATIVE ->
                                Log.d("NO", "NO")
                        }
                    }

                }
                setTitle("TEST2")
                setMessage("click click")
                setPositiveButton("그려요", listener)
                setNegativeButton("아니여", listener)
                setNeutralButton("중립이여", listener)
                show()
            }

2. 체크박스

  • 똑같이 AlertDialog.Builder에서 만듦
  • setMultiChoiceItems 사용
  • booleanArrayOf 에서 기본 체크 세팅을 할 수 있다.
  • 이벤트 자리에는 DialogInterface의 onMultiChoiceClickListener을 구현하여 사용한다.
binding.introButton?.setOnClickListener{
            val items = arrayOf<String>("사과", "복숭아", "체리", "수박")
            AlertDialog.Builder(this).run{
                setTitle("목록 테스트")
                setMultiChoiceItems(items, booleanArrayOf(true, false, true, false), object : DialogInterface.OnMultiChoiceClickListener{
                    override fun onClick(p0: DialogInterface?, p1: Int, p2: Boolean) {
                        Log.d("===================", "${items[p1]} 이${if(p2) "선택되었습니다." else "선택 해제되었습니다."}")
                    }
                })
                setPositiveButton("닫아잇", null)
                show()
            }
        }

3. 라디오버튼

  • setSingleChoiceItems
  • DialogInterface의 onClickListener로 구현할 수 있다.
setSingleChoiceItems(items, 1, object : DialogInterface.OnClickListener{
                    override fun onClick(p0: DialogInterface?, p1: Int) {
                        Log.d("================", "${items[p1]}이 선택되었습니다.람쥐")
                    }
                })

뒤로가기 설정

1) setCancelable(false)

  • 백키 눌렀을 때와 다이얼로그 밖 눌렀을 때 모두 dismiss되지 않게 함
  • 기본 true

2) setCanceledOnTouchOutside(false)

  • 다이얼로그 밖을 눌렀을 때 dismiss되지 않게 함
  • 백키 눌렀을 땐 dismiss 됨

==> 설정 위치가 다르다.

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        val binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
        binding.introButton2?.setOnClickListener {
            AlertDialog.Builder(this).run{
                setTitle("test")
                setMessage("끄겟습니까?")
                setPositiveButton("네", object : DialogInterface.OnClickListener{
                    override fun onClick(p0: DialogInterface?, p1: Int) {
                        Log.d("=============", "YESSSSSSS")
                    }
                })
                setNegativeButton("아녕", null)
                setNeutralButton("흠..", null)
                 setCancelable(false)
                setPositiveButton("닫아잇", null)
                show()
               
            }.setCanceledOnTouchOutside(false)
        }
     ...........
         
profile
야금야금 앱 개발자

0개의 댓글