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)
}
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.