Skip to content

Instantly share code, notes, and snippets.

@ispite
Last active May 6, 2023 15:15
Show Gist options
  • Save ispite/3220794fe5032abcabe06bf6cd4ee9e1 to your computer and use it in GitHub Desktop.
Save ispite/3220794fe5032abcabe06bf6cd4ee9e1 to your computer and use it in GitHub Desktop.
Custom Dialog + Interface Tutorial on Kotlin
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
tools:context="ru.skillbox.custom_dialog_interface_tutorial.MainActivity">
<TextView
android:id="@+id/textview_username"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
android:gravity="center_horizontal"
android:text="here will be our username"
android:textSize="30sp" />
<TextView
android:id="@+id/textview_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/textview_username"
android:layout_alignParentStart="true"
android:gravity="center_horizontal"
android:text="here will be our password"
android:textSize="30sp" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/textview_password"
android:layout_centerHorizontal="true"
android:text="open dialog" />
</RelativeLayout>
package ru.skillbox.custom_dialog_interface_tutorial
import android.app.Dialog
import android.content.Context
import android.os.Bundle
import android.view.View
import android.widget.EditText
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatDialogFragment
class ExampleDialog : AppCompatDialogFragment() {
private var listener: ExampleDialogListener? = null
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val inflater = requireActivity().layoutInflater
val view: View = inflater.inflate(R.layout.layout_dialog, null)
val editTextUsername = view.findViewById<EditText>(R.id.edit_username)
val editTextPassword = view.findViewById<EditText>(R.id.edit_password)
return AlertDialog.Builder(requireActivity())
.setView(view)
.setTitle("Login")
.setNegativeButton("Cancel") {_, _, ->}
.setPositiveButton("Ok") {_, _, ->
val username = editTextUsername.text.toString()
val password = editTextPassword.text.toString()
listener!!.applyTexts(username, password)
}
.create()
}
override fun onAttach(context: Context) {
super.onAttach(context)
listener = try {
context as ExampleDialogListener
} catch (e: ClassCastException) {
throw ClassCastException(
context.toString() +
"must implement ExampleDialogListener"
)
}
}
interface ExampleDialogListener {
fun applyTexts(username: String?, password: String?)
}
}
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp">
<EditText
android:id="@+id/edit_username"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Username" />
<EditText
android:id="@+id/edit_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/edit_username"
android:layout_alignParentStart="true"
android:hint="Password"
android:inputType="textPassword" />
</RelativeLayout>
package ru.skillbox.custom_dialog_interface_tutorial
import android.os.Bundle
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity(), ExampleDialog.ExampleDialogListener {
private var textViewUsername: TextView? = null
private var textViewPassword: TextView? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
textViewUsername = textview_username
textViewPassword = textview_password
//You can use the old search method
//val button = findViewById<View>(R.id.button) as Button
//Or use the synthetic library. Don't forget to add
//'kotlin-android-extensions' plugin in gradle
button.setOnClickListener { openDialog() }
}
private fun openDialog() {
val exampleDialog = ExampleDialog()
exampleDialog.show(supportFragmentManager, "example dialog")
}
override fun applyTexts(username: String?, password: String?) {
textViewUsername!!.text = username
textViewPassword!!.text = password
}
}
@YohannesTz
Copy link

thank you! saved me many searchs!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment