setItems
메서드를 통해 다이얼로그 항목들을 설정하고, 클릭이벤트를 처리할 수 있다. fun listDialog(){
val dataList = arrayOf(
"항목1", "항목2", "항목3", "항목4", "항목5", "항목6",
"항목7", "항목8", "항목9", "항목10", "항목11", "항목12",
"항목13", "항목14", "항목15", "항목16", "항목17", "항목18"
)
val adapter = ArrayAdapter<String>(
this@MainActivity, android.R.layout.simple_spinner_item,dataList
)
val builder = AlertDialog.Builder(this@MainActivity)
builder.setTitle("리스트 다이얼로그")
// builder에 어뎁터 설정
// 두 번째 매개변수에는 사용자가 선택한 항목의 순서값이 들어온다.
builder.setAdapter(adapter){ dialogInterface: DialogInterface, i: Int ->
setTextView.text = "선택한 항목 : ${dataList[i]}"
}
builder.setNegativeButton("취소",null)
builder.show()
}
두 방식은 사용 목적과 상황에 따라 선택 가능
- 단순 리스트를 보여주기 : 항목을 선택하는 기능이라면
AlterDialog.Builder
를 사용하는 것이 간단하고 효과적- 데이터 집합이 많거나 커스텀한 디자인이 필요한 경우
ArrayAdapter
를 사용하여 데이터를 표시하는 것이 더 적절
배열 또는 리스트와 같은 데이터 집합을 사용하여 스피너 또는 리스트뷰와 같은 AdapterView에 데이터를 표시하는데 사용하는 어뎁터 클래스
context
: 어뎁터를 사용하는 컨텍스트 ( this@MainActivity ) resource
: 아이템의 레이아웃 리소스 ID또는 시스템 제공 레이아웃 리소스 ( 예 : android.R.layout.simple_spinner_item
object
: 데이터 집합 => ArrayAdapter를 사용하여 데이터를 스피너에 표시하면, 데이터 집합의 각 항목이 스피터너의 아이템으로 표시되며, 사용자는 이를 선택할 수 있다.
fun listDialog2(){
val dataList = arrayOf(
"항목1", "항목2", "항목3", "항목4", "항목5", "항목6",
"항목7", "항목8", "항목9", "항목10", "항목11", "항목12",
"항목13", "항목14", "항목15", "항목16", "항목17", "항목18"
)
AlertDialog.Builder(this).run{
setTitle("리스트 다이얼로그2")
setItems(dataList,object:DialogInterface.OnClickListener{
override fun onClick(dialog: DialogInterface?, which: Int) {
setTextView.text = "선택한 항목 : "
setTextView.append("${dataList[which]}")
}
})
setNegativeButton("닫기",null)
show()
}
}
fun multiChooseDialog(){
val dataList = arrayOf(
"항목1", "항목2", "항목3", "항목4", "항목5", "항목6",
"항목7", "항목8", "항목9", "항목10", "항목11", "항목12",
"항목13", "항목14", "항목15", "항목16", "항목17", "항목18"
)
val builder = AlertDialog.Builder(this@MainActivity)
builder.setTitle("다중 선택 리스트 다이얼로그")
val boolArray = BooleanArray(dataList.size){i->false}
// 1,3,5값에 true를 넣어주면 선택된 상태로 나옴
boolArray[0] = true
boolArray[2] = true
boolArray[4] = true
builder.setMultiChoiceItems(dataList,boolArray,null)
builder.setNegativeButton("취소",null)
builder.setPositiveButton("확인"){ dialogInterface: DialogInterface, i: Int ->
setTextView.text = ""
// 다이얼로그에서 ListView를 추출
val alertDialog = dialogInterface as AlertDialog
// 현재 선택되어 있는 상태 정보를 추출
val position = alertDialog.listView.checkedItemPositions
// 위에서 반환된 객체에는 체크되어 있는 것과 체크 상태가 변경된 것들의 정보만 담겨있음
// 순서값 = 체크 여부
for(idx in 0 until position.size()){
// 현재 항목의 위치값을 가져온다.
val pos1 = position.keyAt(idx)
// 현재 번째 배열에 값을 넣어준다.
boolArray[pos1] = position.get(pos1)
}
for( idx in 0 until boolArray.size){
if(boolArray[idx] == true){
setTextView.append("${dataList[idx]}\n")
}
}
setTextView.text = "${position}"
}
builder.show()
}
fun multiChooseDialog2() {
val dataList = arrayOf(
"항목1", "항목2", "항목3", "항목4", "항목5", "항목6",
"항목7", "항목8", "항목9", "항목10", "항목11", "항목12",
"항목13", "항목14", "항목15", "항목16", "항목17", "항목18"
)
val boolArray = booleanArrayOf(false, false, false, false, false, false,
false, false, false, false, false, false,
false, false, false, false, false, false)
boolArray[0] = true
boolArray[2] = true
boolArray[4] = true
AlertDialog.Builder(this@MainActivity).run {
setTitle("다중선택 다이얼로그")
setMultiChoiceItems(dataList, boolArray) { dialogInterface, which, isChecked -> }
setNegativeButton("취소", null)
setPositiveButton("확인") { dialogInterface: DialogInterface, i: Int ->
setTextView.text = ""
for (idx in dataList.indices) {
if (boolArray[idx]) {
setTextView.append("${dataList[idx]}\n")
}
}
}
show()
}
}
fun radioDialog() {
val dataList = arrayOf(
"항목1", "항목2", "항목3", "항목4", "항목5", "항목6",
"항목7", "항목8", "항목9", "항목10", "항목11", "항목12",
"항목13", "항목14", "항목15", "항목16", "항목17", "항목18"
)
var checkedItem = 1
val builder = AlertDialog.Builder(this@MainActivity)
builder.setTitle("라디오 선택 리스트 다이얼로그")
builder.setNegativeButton("취소", null)
builder.setPositiveButton("확인") { dialogInterface: DialogInterface, i: Int ->
setTextView.text = "${dataList[checkedItem]}가 선택되었습니다."
}
builder.setSingleChoiceItems(dataList, checkedItem) { dialogInterface: DialogInterface, position: Int ->
checkedItem = position
}
builder.show()
}
open fun setCancelable(cancelable:Boolean):AlertDialogBuilder! open fun setCanceledTouchOutside(cancel:Boolean):Unit
- 뒤로가기 버튼 클릭시 닫기 -> setCancelable(true) // 기본값
- 알림창 바깥 영역 터치시 닫기 -> setCancledTouchOutside(true) // 기본값