MainActivity.kt
package com.cfsuman.kotlintutorials
import android.os.Bundle
import android.widget.*
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity
import com.google.android.material.dialog.MaterialAlertDialogBuilder
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val context:MainActivity = this
// get the widgets reference from XML layout
val button = findViewById<Button>(R.id.button)
val textView = findViewById<TextView>(R.id.textView)
// initial selection (-1 none)
var selectedIndex:Int = -1
button.setOnClickListener {
val builder = MaterialAlertDialogBuilder(context)
// dialog title
builder.setTitle("Which is your favorite?")
val colors = arrayOf(
"African violet",
"Alice blue",
"Alloy orange",
"Android green",
"Amaranth pink",
"Antique bronze"
)
// set single choice items
builder.setSingleChoiceItems(
colors, // array
selectedIndex
){dialog, i ->}
// alert dialog positive button
builder.setPositiveButton("Submit"){dialog,which->
val position = (dialog as AlertDialog)
.listView.checkedItemPosition
// if selected, then get item text
if (position !=-1){
val selectedItem = colors[position]
textView.text = "Favorite color : $selectedItem"
}
}
// alert dialog other buttons
builder.setNegativeButton("No",null)
builder.setNeutralButton("Cancel",null)
// set dialog non cancelable
builder.setCancelable(false)
// finally, create the alert dialog and show it
val dialog = builder.create()
dialog.show()
// initially disable the positive button
dialog.getButton(AlertDialog.BUTTON_POSITIVE)
.isEnabled = false
// dialog list item click listener
dialog.listView.onItemClickListener =
AdapterView.OnItemClickListener {
parent, view, position, id ->
// enable positive button when user select an item
dialog.getButton(AlertDialog.BUTTON_POSITIVE)
.isEnabled = position != -1
// set the current selected index
selectedIndex = position
}
}
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#DCDCDC"
android:padding="24dp">
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Show Dialog"
android:textAllCaps="false"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/textView"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:fontFamily="sans-serif"
android:textSize="24sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/button" />
</androidx.constraintlayout.widget.ConstraintLayout>
build.gradle dependencies[add]
// Material components
implementation 'com.google.android.material:material:1.6.1'



- kotlin syntax - Get string last index
- kotlin syntax - Compare two strings
- kotlin syntax - String padStart and padEnd
- kotlin syntax - Partition a string
- kotlin syntax - String remove range
- kotlin syntax - String remove surrounding
- kotlin - AlertDialog title text color size bold programmatically
- kotlin - AlertDialog title align center programmatically
- kotlin - AlertDialog EditText programmatically
- kotlin - AlertDialog multiple choice