본문 바로가기
안드로이드/메세징

안드로이드 항목 선택 Dialog

by 김어찐 2022. 6. 13.
728x90

단일 선택 Dialog

라디오 버튼 형태를 제공하는 다이얼로그이다.
AlertDialogBuilder의 setSingleChoiceItems 메서드를 통해 구현한다.

AlertDialog에서 ListView를 추출하고 ListView의 checkedItemPosition 프로퍼티를 이용해 선택한 항목의

인덱스 번호를 파악할 수 있다.

 

다중 선택 Dialog

체크박스 형태를 제공하는 다이얼로그이다
AlertDialogBuilder의 setMultiChoiceItems 메서드를 통해 구현한다.
AlertDialogBuilder에서 ListView를 추출하고 ListView의 checkedItemPositions 프로퍼티를 이용해 현재 선택된 항목들을 파악할 수 있다.
이 때, 선택 상태가 변경된 항목의 인덱스가 추출 되므로 이를 이용해 선택 여부를 직접 확인해야 한다.

 

 

package com.example.singleselectdialog

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AlertDialog
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

    val data1 = arrayOf(
        "항목1", "항목2","항목3","항목4","항목5","항목6","항목7","항목8"
    )
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        button.setOnClickListener {
            val builder = AlertDialog.Builder(this)
            builder.setTitle("Single Choice List")

            // 초기 3번 선택
            builder.setSingleChoiceItems(data1, 3) { dialogInterface, i ->
                val t1 = Toast.makeText(this,data1[i],Toast.LENGTH_SHORT)
                t1.show()
            }

            builder.setNegativeButton("취소",null)
            builder.setPositiveButton("확인"){dialogInterface, i ->
                val alert = dialogInterface as AlertDialog

                val idx = alert.listView.checkedItemPosition

                textView.text = "선택된 항목 : ${data1[idx]}"
            }

            builder.show()
        }

        button2.setOnClickListener {
            val builder = AlertDialog.Builder(this)
            val boolArray = booleanArrayOf(true,false,false,true,false,false,false,false)

            builder.setMultiChoiceItems(data1,boolArray){ dialogInterface, i, b ->
                if (b == true) {
                    val t1 = Toast.makeText(this, "${data1[i]}가 체크되었습니다", Toast.LENGTH_SHORT)
                    t1.show()
                } else {
                    val t2 = Toast.makeText(this, "${data1[i]}가 체크 해제되었습니다", Toast.LENGTH_SHORT)
                    t2.show()
                }


            }

            builder.setNegativeButton("취소",null)
            builder.setPositiveButton("확인") { dialogInterface, i ->
                val alert = dialogInterface as AlertDialog

                textView.text=""

                val postions = alert.listView.checkedItemPositions
                for (i in 0 until postions.size()) {
                    // 체크상태가 변경된 항목으ㅟ 인덱스 번호를 추출한다.
                    val index = postions.keyAt(i)

                    if (postions.get(index) == true) {
                        textView.append("${data1[index]}, ")
                    }
                }
            }

            builder.show()
        }
    }
}

 

 

728x90

'안드로이드 > 메세징' 카테고리의 다른 글

안드로이드 PendingIntent  (0) 2022.06.13
안드로이드 Notification  (0) 2022.06.13
안드로이드 ListDialog  (0) 2022.06.13
안드로이드 Dialog  (0) 2022.06.13
안드로이드 SnackBar  (0) 2022.06.13