So I have a Fragment known as LoginHomeFragment which contains buttons to 2 fragments of my app, RegisterFragment & LoginFragment The button click for RegisterFragment works perfectly But when the LoginFragment button is clicked, the app automatically closes. This is the same when I redirect to the LoginFragment from my RegisterFragment. The code for my app is the following:-
LoginHomeFragment.kt
class LoginHomeFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
var view = inflater.inflate(R.layout.fragment_login_home, container, false)
view.findViewById<Button>(R.id.btn_dir_register).setOnClickListener {
var navRegister = activity as FragmentNavigation
navRegister.navigateFrag(RegisterFragment(), false)
}
view.findViewById<Button>(R.id.btn_dir_login).setOnClickListener {
var navRegister = activity as FragmentNavigation
navRegister.navigateFrag(LoginFragment(), false)
}
return view
}
}
LoginFragment.kt
class LoginFragment : Fragment() {
private lateinit var username: EditText
private lateinit var password: EditText
private lateinit var forgot: EditText
private lateinit var fAuth: FirebaseAuth
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val view = inflater.inflate(R.layout.fragment_login, container, false)
username = view.findViewById(R.id.log_username)
password = view.findViewById(R.id.log_password)
fAuth = Firebase.auth
forgot = view.findViewById(R.id.forgot_pwd)
view.findViewById<Button>(R.id.btn_register).setOnClickListener {
val navRegister = activity as FragmentNavigation
navRegister.navigateFrag(RegisterFragment(), false)
}
view.findViewById<Button>(R.id.btn_login).setOnClickListener {
validateForm()
}
forgot.setOnClickListener {
forgotpassword()
}
return view
}
private fun forgotpassword() {
val icon = AppCompatResources.getDrawable(requireContext(), R.drawable.ic_warning)
icon?.setBounds(0, 0, icon.intrinsicWidth, icon.intrinsicHeight)
when {
TextUtils.isEmpty(username.text.toString().trim()) -> {
username.setError("Please Enter Your Registered Email-Id", icon)
}
username.text.toString().isNotEmpty() -> {
if (username.text.toString().matches(Regex("[a-zA-Z0-9._-]+@[a-z]+\\.+[a-z]+"))) {
Firebase.auth.sendPasswordResetEmail(username.text.toString())
.addOnCompleteListener { task ->
if (task.isSuccessful) {
Log.d(TAG, "Password reset email sent.")
} else {
Toast.makeText(context, task.exception?.message, Toast.LENGTH_SHORT).show()
}
}
} else {
username.setError("Please enter valid email-id.", icon)
}
}
}
}
private fun validateForm() {
val icon = AppCompatResources.getDrawable(requireContext(),R.drawable.ic_warning)
icon?.setBounds(0,0,icon.intrinsicWidth,icon.intrinsicHeight)
when{
TextUtils.isEmpty(username.text.toString().trim())->{
username.setError("Please Enter Username", icon)
btn_register_reg.isEnabled = false
}
TextUtils.isEmpty(password.text.toString().trim())->{
password.setError("Please Enter Password", icon)
btn_register_reg.isEnabled = false
}
username.text.toString().isNotEmpty() &&
password.text.toString().isNotEmpty() -> {
if (username.text.toString().matches(Regex("[a-zA-Z0-9._-]+@[a-z]+\\.+[a-z]+"))) {
firebaseSignIn()
} else {
username.setError("Please enter valid email-id.", icon)
}
}
}
}
private fun firebaseSignIn() {
btn_login.isEnabled = false
btn_login.alpha = 0.5f
fAuth.signInWithEmailAndPassword(username.text.toString(), password.text.toString())
.addOnCompleteListener { task ->
if (task.isSuccessful) {
Toast.makeText(context, "Login Successful", Toast.LENGTH_SHORT).show()
activity?.let {
val intent = Intent(it, HomeActivity::class.java)
it.startActivity(intent)
}
} else {
btn_login.isEnabled = true
btn_login.alpha = 1f
Toast.makeText(context, task.exception?.message, Toast.LENGTH_SHORT).show()
}
}
}
}
fragment_login.xml
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context=".LoginFragment">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:focusableInTouchMode="true"
android:orientation="vertical">
<ImageView
android:layout_width="70dp"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:layout_marginTop="90dp" />
<!-- TODO add the image -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="MedDrone"
android:textColor="#000"
android:textSize="15dp"
android:layout_marginTop="11dp" />
<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Email"
app:boxBackgroundColor="#F8E9FD"
android:layout_marginTop="50dp"
android:layout_marginStart="40dp"
android:layout_marginEnd="40dp">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/log_username"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Password"
app:boxBackgroundColor="#F8E9FD"
android:layout_marginTop="10dp"
android:layout_marginStart="40dp"
android:layout_marginEnd="40dp">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/log_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textPassword"/>
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:boxBackgroundColor="#F8E9FD"
android:layout_marginTop="10dp"
android:layout_marginStart="40dp"
android:layout_marginEnd="40dp">
<com.google.android.material.textview.MaterialTextView
android:id="@+id/forgot_pwd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Forgot Password?"
android:textColor="@color/zm_red"/>
</com.google.android.material.textfield.TextInputLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp">
<com.google.android.material.button.MaterialButton
android:id="@+id/btn_login"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginEnd="40dp"
android:text="Login" />
<com.google.android.material.button.MaterialButton
android:id="@+id/btn_register"
style="@style/Widget.MaterialComponents.Button.TextButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="40dp"
android:layout_toLeftOf="@+id/btn_login"
android:text="Register" />
</RelativeLayout>
</LinearLayout>
</ScrollView>
LogCat
2022-01-05 17:12:47.303 19721-19721/com.rgoel.meddrone E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.rgoel.meddrone, PID: 19721
java.lang.ClassCastException: com.google.android.material.textview.MaterialTextView cannot be cast to android.widget.EditText
at com.rgoel.meddrone.LoginFragment.onCreateView(LoginFragment.kt:38)
at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2963)
at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:518)
at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:282)
at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2189)
at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:2100)
at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:2002)
at androidx.fragment.app.FragmentManager$5.run(FragmentManager.java:524)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:254)
at android.app.ActivityThread.main(ActivityThread.java:8231)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:612)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1006)