카테고리 없음

안드로이드 - 리스트 다이얼로그

누알라리 2020. 2. 13. 23:41
1. 리스트 다이얼로그란?

- 다이얼로그에 리스트뷰를 표시할 수 있는 다이얼로그

- 다이얼로그는 버튼을 총 3개까지 배치할 수 있는데 그 이상이 필요할 경우 리스트 다이얼로그를 사용하면 된다.

 

2. 기본 다이얼로그

- 리스트 다이얼로그에서 어떤 항목을 클릭하면 그 항목의 데이터가 텍스트뷰에 나오도록하는 예제.

- 리스너 세팅할 때 버튼들에 세팅하면 이게 몇번째 버튼인지/setItems에 세팅하면 이게 몇번째 항목인지가 들어옴.

 

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        button8.setOnClickListener { view ->

            var builder = AlertDialog.Builder(this)
            builder.setTitle("리스트 다이얼로그")
            builder.setNegativeButton("취소", null)

            //리스너 세팅
            //리스트뷰 다이얼로그의 몇번째 항목을 선택했는지가 which에 들어옴
            //버튼들에 세팅하면 이게 몇번째 버튼인지/setItems에 세팅하면 이게 몇번째 항목인지가 들어옴.옴
            var listner =  object:DialogInterface.OnClickListener{
            override fun onClick(dialog: DialogInterface?, which: Int) {
                textView.text = "기본리스트 다이얼로그 :  ${data1[which]}"
            }
        }
            builder.setItems(data1, listner)
            builder.show()

        }
    }
3. 커스텀 리스트 다이얼로그

1. 리스트 항목 하나의 레이아웃을 xml파일로 생성한다.

2. 심플어댑터 쓰려면 항목 한 칸을 구성하기 위한 항목들을 해쉬맵에 담고, 그 해쉬맵을 리스트에 담고 그 리스트를 심플어댑터에 넣어줘야 한다.

3. 리스트 항목을 채울 data들을 만든다

 

    var data2 = arrayOf("슬림쿡", "다이어트", "도시락")
    var data3 = intArrayOf(R.drawable.images, R.drawable.images, R.drawable.images)
    
         // 커스텀 리스트 다이얼로그
        // xml 파일로 리스트 항목 하나의 구성을 세팅하고 한다. 심플어댑터가 필요하다.
        button.setOnClickListener { view ->
            var builder = AlertDialog.Builder(this)
            builder.setTitle("커스텀 리스트 다이얼로그")

            //심플어댑터 쓰려면 항목 한 칸을 구성하기 위한 항목들을 해쉬맵에 담고, 그 해쉬맵을 리스트에 담고 그 리스트를 심플어댑터에 넣어줘야 한다.
            var list = ArrayList<HashMap<String, Any>>()

            var idx = 0
            while(idx < data2.size)
            {
                var map = HashMap<String, Any>()
                map.put("data2", data2[idx])
                map.put("data3", data3[idx])

                list.add(map)
                idx++

            }

            var keys = arrayOf("data2", "data3")
            var ids = intArrayOf(R.id.textview2, R.id.imageview)

            var adapter = SimpleAdapter(this, list, R.layout.custom_dialogue, keys, ids)


            var listner = object:DialogInterface.OnClickListener{
                override fun onClick(dialog: DialogInterface?, which: Int) {
                    textView.text = "커스텀 다이얼로그 : ${data2[which]}"
                }
            }

            builder.setAdapter(adapter, listner)
            
            builder.setNegativeButton("취소", listner)
            builder.show()
        }