반응형
Recent Posts
Recent Comments
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

Bbaktaeho

[Android] Dialog 띄우기 (Kotlin, Alert, DatePicker, TimePicker 팝업창) 본문

개발 (Develop)/안드로이드 (Android)

[Android] Dialog 띄우기 (Kotlin, Alert, DatePicker, TimePicker 팝업창)

Bbaktaeho 2020. 10. 13. 16:04
반응형

들어가며


안드로이드 기본 Dialog들 중 AlertDialogDatePickerDialog 그리고 TimePickerDialog를 사용해보겠습니다.

AlertDialog는 보통 경고창으로 사용됩니다.

확인과 취소를 통해서 작업을 수행하기 전에 한 번 더 경고하는 역할을 합니다.

DatePickerDialog는 날짜 정보를 받을 수 있는 팝업창입니다.

TimePickerDialog는 시간 정보를 받을 수 있는 팝업창 입니다.

 

구현은 ListView에서 아이템을 클릭했을 때 팝업창을 활성화하겠습니다.

프로젝트는 코틀린으로 생성하겠습니다. (생략)

리스트 뷰 만들기


activity_main.xml를 수정합니다.

아이템 뷰는 안드로이드 simple_list_item_1 뷰를 사용하겠습니다.

기능 구현하기


기본 어댑터인 ArrayAdapter 클래스를 사용하겠습니다.

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

        val items = mutableListOf<String>()
        items.add("Alert!")
        items.add("DatePicker!")
        items.add("TimePicker!")
        items.add("네이버")

        val adapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, items)
        listView.adapter = adapter
    }
}

더미 데이터(items)를 만들어주고 ArrayAdapter에 인자로 전달합니다.

 

다음은 아이템을 클릭했을 때 이벤트를 처리하는 코드를 작성하겠습니다.

listView.setOnItemClickListener { parent, view, position, id ->
	val item = parent.getItemAtPosition(position)
	Toast.makeText(this, item.toString(), Toast.LENGTH_SHORT).show()
}

아이템을 클릭하면 토스트에 문자열이 그대로 출력됩니다.

 

이제 Dialog를 띄우겠습니다.

추가로 Intent를 사용하여 웹 브라우저로 네이버 사이트를 띄워보겠습니다.

 

AndroidManifest.xml에서 Internet permission부터 허용해 줍니다.

 

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

        val items = mutableListOf<String>()
        items.add("Alert!")
        items.add("DatePicker!")
        items.add("TimePicker!")
        items.add("네이버")

        val adapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, items)
        listView.adapter = adapter

        listView.setOnItemClickListener { parent, view, position, id ->
            val item = parent.getItemAtPosition(position)

            when (item.toString()) {
                "Alert!" -> showAlert()
                "DatePicker!" -> showDatePicker()
                "TimePicker!" -> showTimePicker()
                "네이버" -> showWeb()
            }
        }
    }

    private fun showAlert() {
        AlertDialog.Builder(this)
            .setTitle("앱 종료")
            .setPositiveButton("종료") { dialogInterface: DialogInterface, i: Int -> finish() }
            .setNegativeButton("취소") { dialogInterface: DialogInterface, i: Int -> }
            .show()
    }

    private fun showDatePicker() {
        val cal = Calendar.getInstance()
        DatePickerDialog(this, DatePickerDialog.OnDateSetListener { datePicker, y, m, d->
            Toast.makeText(this, "$y-$m-$d", Toast.LENGTH_SHORT).show()
        }, cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DATE)).show()
    }

    private fun showTimePicker() {
        val cal = Calendar.getInstance()
        TimePickerDialog(this, TimePickerDialog.OnTimeSetListener { timePicker, h, m ->
            Toast.makeText(this, "$h:$m", Toast.LENGTH_SHORT).show()
        }, cal.get(Calendar.HOUR), cal.get(Calendar.MINUTE), true).show()
    }

    private fun showWeb() {
        startActivity(Intent(Intent.ACTION_VIEW, Uri.parse("https://www.naver.com")))
    }
}

멤버 함수로 구현한 다음 리스너에서 실행되도록 구현했습니다.

실행


 

전체 화면이나 팝업으로 재생하면 보기 편합니다.

 

반응형