Как я могу исправить IllegalArgumentException при загрузке фрагмента - PullRequest
0 голосов
/ 01 апреля 2020

Эта ошибка уже была исправлена ​​в разных сообщениях, но я не могу исправить ее после прочтения, поэтому надеюсь, что вы мне поможете. У меня есть активность с одним фрагментом, который я хочу загрузить, но я продолжаю получать следующую ошибку, когда пытаюсь открыть свое приложение. Я убедился, что идентификатор, в который я пытался загрузить свой фрагмент, совпадает с идентификатором в моем FrameLayout и совпадает с указателем и макетом этого фрагмента.

java.lang.IllegalArgumentException: No view found for id 0x7f080083 (es.uam.eps.tfg.menuplanner:id/container_login) for fragment LoginFragment{780bea} (82f1517c-e603-4cad-85d1-1dcd49b1b273) id=0x7f080083}

MainActivity .kt

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        var fragment = supportFragmentManager.findFragmentById(R.id.container_login)

        if (fragment == null){
            fragment = LoginFragment.newInstance()
            supportFragmentManager.beginTransaction().add(R.id.container_login, fragment).addToBackStack(null).commit()
        }
    }
}

Activity_main. xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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">

    <FrameLayout
        android:id="@+id/container_login"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity" />

</androidx.constraintlayout.widget.ConstraintLayout>

LoginFragment.kt

package es.uam.eps.tfg.menuplanner.firebase

import android.os.Bundle
import android.util.Log
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.google.firebase.auth.FirebaseAuth

import es.uam.eps.tfg.menuplanner.R
import kotlinx.android.synthetic.main.fragment_login.*

const val LOGIN_TAG = "Login"

class LoginFragment : Fragment() {

    private lateinit var auth: FirebaseAuth

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        auth = FirebaseAuth.getInstance()
    }

    override fun onStart() {
        super.onStart()
        //Checks if user is signed in
        var currentUser = auth.currentUser

        if (currentUser != null)
            Log.d(LOGIN_TAG, "Usuario " + currentUser.displayName)
        else {
            Log.d(LOGIN_TAG, " No Usuario")
        }

        button_next_login.setOnClickListener {
            auth.createUserWithEmailAndPassword(login_email_text.toString(), login_password_text.toString()).addOnCompleteListener() { task ->
                if (task.isSuccessful) {
                    Log.d(LOGIN_TAG, "Usuario creado ok")
                    currentUser = auth.currentUser
                } else {
                    Log.w(LOGIN_TAG, "Usuario no creado fail", task.exception)
                }
            }
        }

        button_sign_up.setOnClickListener {
            activity?.supportFragmentManager?.beginTransaction()?.replace(R.id.container_login, SignUpFragment.newInstance())?.commit()
        }
    }

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        return inflater.inflate(R.layout.fragment_login, container, false)
    }

    companion object {
        fun newInstance() : LoginFragment = LoginFragment()
    }
}

фрагмент_логина. xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:id="@+id/fragment_login"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="24dp"
    android:paddingTop="16dp"
    android:orientation="vertical"
    >

    <ImageView
        android:layout_width="64dp"
        android:layout_height="64dp"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="48dp"
        android:layout_marginBottom="16dp"
        android:contentDescription="@string/app_logo"
        app:srcCompat="@drawable/ic_app_logo" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginBottom="132dp"
        android:text="@string/app_name"
        android:textAppearance="@style/TextAppearance.MenuPlanner.Title" />


    <com.google.android.material.textfield.TextInputLayout
        android:id="@+id/login_email_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
        android:hint="@string/email">

        <com.google.android.material.textfield.TextInputEditText
            android:inputType="text"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            />

    </com.google.android.material.textfield.TextInputLayout>

    <com.google.android.material.textfield.TextInputLayout
        android:id="@+id/login_password_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
        android:hint="@string/password">

        <com.google.android.material.textfield.TextInputEditText
            android:inputType="textPassword"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            />

    </com.google.android.material.textfield.TextInputLayout>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        >

        <com.google.android.material.button.MaterialButton
            android:id="@+id/button_next_login"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentEnd="true"
            android:text="@string/button_next" />

        <com.google.android.material.button.MaterialButton
            android:id="@+id/button_sign_up"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toStartOf="@id/button_next_login"
            android:layout_marginEnd="12dp"
            style="?attr/materialButtonOutlinedStyle"
            android:text="@string/button_sign_up" />

    </RelativeLayout>



</LinearLayout>
...