Solo se permiten llamadas seguras (?.) O no afirmadas (n.) En un receptor anulable.

¿Tengo que usar ?. y !!. cada vez dentro onBindViewHolder y onCreateViewHolder ? Hay alguna manera de evitar esto?

holder.textview.text y parent.context muestra este error.

Código:

 override fun onBindViewHolder(holder: ViewHolder?, position: Int) { holder.textview.text = items[position] } override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int):ViewHolder { return ViewHolder(TextView(parent.context)) } 

Cuando reemplaza un método declarado en Java, sus parameters tendrán types de plataforma, lo que significa que no hay información de anulación sobre ellos (a less que estén explícitamente anotados ). Depende de usted decidir si marcar estos parameters con nulos o no. Consulte los documentos oficiales sobre types de plataforma .

En tu caso, puedes quitar el ? de estos dos parameters, ya que nunca pasarán valores null . Esto lo alivia de tener que hacer comprobaciones nulas obligatorias.


Esto es lo que parece con los types anulables eliminados:

 override fun onBindViewHolder(holder: ViewHolder, position: Int) { holder.textview.text = items[position] } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { return ViewHolder(TextView(parent.context)) } 

El titular de la vista nunca será nulo, a less que haya creado un null viewholder en su onCreateViewHolder cuando count> 0, por lo que es seguro eliminarlo ?

 override fun onBindViewHolder(holder: ViewHolder, position: Int) { holder.textview.text = items[position] } 

Cuando trabaja con types anulables como en su ejemplo, debe aplicar medidas de security a su código. ¿O usas ?. cada vez que revises si tu parámetro es !=null . Después de tal if el comstackdor sabe que las llamadas a este parámetro son seguras y null no es posible.

En su caso especial, no es necesario tener types que aceptan nulos. Solo elimine los signos de interrogación de los parameters y todo estará bien.

Por cierto: ¡no uses !! , sin duda hay una mejor solución

  • Kotlin - Henetworkinga de Java Class que implementa Parcelable
  • Accidentes de aplicaciones de cronómetro Android
  • Mocktito ArgumentCaptor para Kotlin lambda con arguments
  • Cómo hacer que la key principal sea autoincrement para Room Persistence lib
  • Android ViewModelProviderFactory en kotlin
  • Varios errores en mis fragments después de actualizar la biblioteca de soporte a 27.0.0
  • ¿Cómo get una KClass de Array?
  • Kotlin - IllegalArgumentException en método anulado
  • Manejando una tarea después de un Fragmento de Cargas
  • Android Kotlin Extension super calling
  • Cómo el aceptador puede agregar valor al estado y devolverlo al iniciador