transaction support studio manager context android android-fragments kotlin android-support-library

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.