I've inflated my custom dialog into a variable called dialogView then using dialogView I tried to get the MaterialTextView, MaterialButton that is a child view to this, but it keep returning null to me.
Custom dialog view
<?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">
<androidx.constraintlayout.widget.Guideline
android:id="@+id/gl10"
android:layout_width="1dp"
android:layout_height="match_parent"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.10" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/gl90"
android:layout_width="1dp"
android:layout_height="match_parent"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.90" />
<com.google.android.material.textview.MaterialTextView
android:id="@+id/tvHeader1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Error"
app:layout_constraintHorizontal_bias="0"
app:layout_constraintStart_toEndOf="@+id/gl10"
app:layout_constraintEnd_toStartOf="@+id/gl90"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:textStyle="bold" />
<com.google.android.material.textview.MaterialTextView
android:id="@+id/tvDescription1"
android:layout_width="0dp"
android:layout_height="wrap_content"
tools:text="Error Description"
app:layout_constraintStart_toEndOf="@+id/gl10"
app:layout_constraintEnd_toStartOf="@+id/gl90"
app:layout_constraintTop_toBottomOf="@+id/tvHeader1"
android:layout_marginStart="8dp"
android:layout_marginTop="16dp" />
<com.google.android.material.button.MaterialButton
android:id="@+id/btnNegative1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="Cancel"
app:layout_constraintStart_toEndOf="@+id/gl10"
app:layout_constraintEnd_toStartOf="@+id/btnPositive1"
app:layout_constraintTop_toBottomOf="@+id/tvDescription1"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintVertical_bias="0"/>
<com.google.android.material.button.MaterialButton
android:id="@+id/btnNeutral1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="Neutral"
app:layout_constraintStart_toEndOf="@+id/gl10"
app:layout_constraintEnd_toStartOf="@+id/gl90"
app:layout_constraintTop_toBottomOf="@+id/btnNegative1"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintVertical_bias="0" />
<com.google.android.material.button.MaterialButton
android:id="@+id/btnPositive1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="OK"
app:layout_constraintStart_toEndOf="@+id/btnNegative1"
app:layout_constraintEnd_toStartOf="@+id/gl90"
app:layout_constraintTop_toBottomOf="@+id/tvDescription1"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintVertical_bias="0" />
</androidx.constraintlayout.widget.ConstraintLayout>
Inside my class which extends DialogFragment
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val dialogBuilder = AlertDialog.Builder(activity)
val dialogView = layoutInflater.inflate(R.layout.custom_dialog, null)
dialogBuilder.setView(dialogView)
dialogView.findViewById<MaterialTextView>(R.id.tvHeader1).text = title
dialogView.findViewById<MaterialTextView>(R.id.tvDescription1).text = message
if (positiveText != null && positiveListener != null) {
val btnPositive = dialogView.findViewById<MaterialButton>(R.id.btnPositive1)
btnPositive.text = positiveText
btnPositive.setOnClickListener { v ->
positiveListener.onClick(v)
}
}
if (negativeText != null && negativeListener != null) {
val btnNegative = dialogView.findViewById<MaterialButton>(R.id.btnNegative1)
btnNegative.text = negativeText
btnNegative.setOnClickListener { v ->
negativeListener.onClick(v)
}
}
if(neutralText != null && neutralListener != null) {
val btnNeutral = dialogView.findViewById<MaterialButton>(R.id.btnNeutral1)
btnNeutral.text = negativeText
btnNeutral.setOnClickListener { v ->
neutralListener.onClick(v)
}
}
dialogBuilder.setCancelable(cancelable)
val dialog = dialogBuilder.create()
dialog.setCanceledOnTouchOutside(cancelable)
return dialog
}
My dialogView.findViewById<MaterialTextView>(R.id.tvHeader1) code keeps getting null thus making the app crash at this line when trying to update the text of null object.
Stuck for hours on this, been searching and trying but don't seems to get it why it is not working.