web-dev-qa-db-fra.com

Comment utiliser des fragments avec kotlin

Je ne trouve pas comment utiliser des fragments en utilisant kotlin. Je reçois une erreur dans la méthode onCreateView, veuillez m'aider.

ListaFragment.kt:

class ListaFragment : Fragment() {

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle): View? {
    val view = inflater.inflate(R.layout.fragment_lista, container, false)

    return view
}
}

fragment_lista.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:orientation="vertical" Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:gravity="center">

    <TextView
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:textAlignment="center"
        Android:text="Hello"/>
</LinearLayout>

MainActivity.kt:

class MainActivity : AppCompatActivity() {

    private var listaFragment: ListaFragment? = null
    override fun onCreate(savedState: Bundle?) {
        super.onCreate(savedState) //cual es la diferencia con savedInstanceState
        setContentView(R.layout.activity_main)

        listaFragment = Fragment.instantiate(this@MainActivity,
                ListaFragment::class.Java!!.getName()) as ListaFragment

        fragmentManager.beginTransaction().replace(R.id.flLista, listaFragment).commit()
    }
}

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    Android:orientation="vertical"
    tools:context="com.example.harol.appfinalandroid.MainActivity">

    <FrameLayout
        Android:id="@+id/flLista"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"></FrameLayout>

</LinearLayout>

Je n'ai aucune erreur de syntaxe, l'application s'arrête lorsque j'ouvre le fragment

erreur:

Caused by: Java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter savedInstanceState
                                                                                     at com.example.harol.appfinalandroid.ListaFragment.onCreateView(ListaFragment.kt:0)
14
Harol Rodriguez

savedInstanceState est nullable, mais vous l'avez déclaré comme Bundle - il devrait être Bundle?.

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?): View? {
14
ianhanniballake

J'ai aussi eu ce problème et cela m'a rendu fou jusqu'à ce que je le trouve.

Dans le onCreateView, vous devez rendre savedInstanceState nullable comme ceci:

savedInstanceState: Bundle? (ajoutez un point d'interrogation pour indiquer qu'il peut être annulé)

2
Aenadon