android - support - Varios errores en mis fragmentos después de actualizar la biblioteca de soporte a 27.0.0
replace fragment kotlin (1)
Después de actualizar la biblioteca de soporte de v-26.1.0 a v-27.0.0 Varios errores en mis fragmentos.
Aquí hay una lista de algunos de estos errores:
Error: la conversión inteligente a ''Bundle'' es imposible, porque ''argumentos'' es una propiedad mutable que podría haberse cambiado para este momento.
Error: ''onCreateView'' anula nada
Error: ''onViewCreated'' anula nada
Error: No coincide el tipo: ¿el tipo inferido es Ver? pero se esperaba ver
Error: No hay coincidencia de tipo: el tipo inferido es ¿Contexto? pero se esperaba contexto
Error: No hay coincidencia de tipo: el tipo inferido es FragmentActivity? pero se esperaba contexto
Error: No hay coincidencia de tipo: el tipo inferido es FragmentActivity? pero se esperaba contexto
de la plantilla de Android Studio para el fragmento vacío.
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 causa raíz de todos estos errores es que en la biblioteca de soporte v-27.0.0 se han agregado las anotaciones @Nullable
y @NonNull
.
y dado que el lenguaje kotlin es consciente de la nulabilidad y tiene un tipo diferente para Nullable
y NonNull
, a diferencia de Java.
sin estas anotaciones, el compilador no tiene manera de diferenciarlas, y el estudio de Android estaba haciendo todo lo posible para inferir el tipo correcto.
TL; DR: cambia los tipos para reflejar correctamente el estado de nulabilidad.
Error: la conversión inteligente a ''Bundle'' es imposible, porque ''argumentos'' es una propiedad mutable que podría haberse cambiado para este momento.
cambiar los arguments.getString(ARG_NAME)
==> arguments?.getString(ARG_NAME) ?: ""
Error: ''onCreateView'' anula nada
chane
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View?
==>
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View?
Error: ''onViewCreated'' anula nada
cambio:
override fun onViewCreated(view: View?, savedInstanceState: Bundle?)
==>
override fun onViewCreated(view: View, savedInstanceState: Bundle?)
Error: No hay coincidencia de tipo: el tipo inferido es ¿Contexto? pero se esperaba contexto
Si el contexto se pasa como argumento al método, solo use la solución rápida para reemplazar getContext()
con getContext()?.let{}
lo mismo se aplica al context
versión corta de kotlin.
de lo contrario, si se usa para llamar a algún método, reemplace getContext().someMethod()
con getContext()?.someMethod()
Lo mismo se aplica al context?.someMethod()
versión corta de context?.someMethod()
.
Error: No hay coincidencia de tipo: el tipo inferido es FragmentActivity? pero se esperaba contexto
Utilice la corrección del error anterior.