web-dev-qa-db-fra.com

Plusieurs erreurs dans mes fragments après la mise à jour de la bibliothèque de support vers 27.0.0

Après la mise à jour de la bibliothèque de support de la v-26.1.0 à la v-27.0.0 Plusieurs erreurs dans mes fragments.

voici une liste de certaines de ces erreurs:

Erreur: la conversion intelligente vers "Bundle" est impossible, car "arguments" est une propriété modifiable qui aurait pu être modifiée à ce stade.

Erreur: "onCreateView" ne remplace rien

Erreur: "onViewCreated" ne remplace rien

Erreur: incompatibilité de type: le type déduit est Afficher? mais la vue était attendue

Erreur: incompatibilité de type: le type déduit est Contexte? mais le contexte était attendu

Erreur: incompatibilité de type: le type déduit est FragmentActivity? mais le contexte était attendu

Erreur: incompatibilité de type: le type déduit est FragmentActivity? mais le contexte était attendu

de Android modèle de studio pour un fragment vide.

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    if (arguments != null) {
        mParam1 = arguments.getString(ARG_PARAM1)
        mParam2 = arguments.getString(ARG_PARAM2)
    }
}

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

override fun onViewCreated(view: View?, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
}
22
humazed

La cause première de toutes ces erreurs est que dans la bibliothèque de support v-27.0.0 @Nullable Et @NonNull Des annotations ont été ajoutées.
et puisque le langage kotlin est conscient de la nullité et a un type différent pour Nullable et NonNull, contrairement à Java.
sans ces annotations, le compilateur n'a aucun moyen de les différencier, et Android studio faisait de son mieux pour déduire le bon type.

TL; DR: modifiez les types pour refléter correctement l'état de nullité.


Erreur: la conversion intelligente vers "Bundle" est impossible, car "arguments" est une propriété modifiable qui aurait pu être modifiée à ce stade.

changer arguments.getString(ARG_NAME) ==> arguments?.getString(ARG_NAME) ?: ""


Erreur: "onCreateView" ne remplace rien

chane:

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

==>

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

Erreur: "onViewCreated" ne remplace rien

changement:

override fun onViewCreated(view: View?, savedInstanceState: Bundle?)

==>

override fun onViewCreated(view: View, savedInstanceState: Bundle?)

Erreur: incompatibilité de type: le type déduit est Contexte? mais le contexte était attendu

si le contexte est passé comme argument à la méthode, utilisez simplement le correctif rapide pour remplacer getContext() par getContext()?.let{}
il en va de même pour la version courte de kotlin context.

sinon si est utilisé pour appeler une méthode, remplacez getContext().someMethod() par getContext()?.someMethod()

il en va de même pour la version courte de kotlin context?.someMethod().


Erreur: incompatibilité de type: le type déduit est FragmentActivity? mais le contexte était attendu

utilisez le correctif de l'erreur précédente.

38
humazed