Last active
May 6, 2023 15:15
-
-
Save ispite/3220794fe5032abcabe06bf6cd4ee9e1 to your computer and use it in GitHub Desktop.
Custom Dialog + Interface Tutorial on Kotlin
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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?) | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
thank you! saved me many searchs!