¿Cómo prevenir cargar en Crear de Fragmento antes de Java?

Hola, traté de hacer este tutorial ahora que tengo el problema de que cuando inicio la aplicación se bloquea porque los arguments de mi fragment son nulos. Encontré la respuesta de que tengo que eliminar el fragment de mi content_main.xml, pero cuando lo hago, la aplicación comienza pero se comporta de manera extraña y no creo que esta sea la respuesta correcta para el problema.

Entonces el onCreate () de mi MainActivityFragment se llama antes del código java, así que tuve problemas con estas líneas:

override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) page = this.arguments.getInt("someInt", 0) title = this.arguments.getString("someTitle") } 

¿Cuál es la solución correcta para el problema?

Mi código está en github

De acuerdo con su proyecto GitHub , está implementando Fragment instanciación de una manera incorrecta. Cuando invoca var fragment = MainActivityFragment() , crea una nueva instancia de su fragment pero no se proporcionan arguments , por lo tanto, cuando se onCreate método onCreate , los arguments son null y esa es la razón por la cual su aplicación falla.

Para solucionar el locking de la aplicación, debe implementar instancias de fragments de la siguiente manera:

MainActivityFragment (Editado)

 // Wrap new instance function inside companion object companion object { // newInstance constructor for creating fragment with arguments fun newInstance(page: Int, title: String): MainActivityFragment { val fragmentFirst = MainActivityFragment() val args = Bundle() args.putInt("someInt", page) args.putString("someTitle", title) fragmentFirst.arguments = args return fragmentFirst } } //... override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) if(null != this.arguments) { page = this.arguments.getInt("someInt", 1) title = this.arguments.getString("someTitle") } } 

MyPagerAdapter

 override fun getItem(position: Int): Fragment? { when (position) { 0 // Fragment # 0 - Ensure to return a new fragment instance with valid arguments -> return MainActivityFragment.newInstance(0, "Page # 1") 1 // Fragment # 0 - This will show FirstFragment different title -> return SecondFragment.newInstance(1, "Page # 2") else -> return null } } 

No olvide envolver la function SecondFragment newInstance dentro del object complementario.

  • ObjectAnimator.ofFloat no puede tomar Int como parameters directamente en kotlin
  • Procesador de anotación Kotlin: no puede hacer que funcione
  • Kotlin: Obligatorio: kotlin.Boolean. Encontrado: kotlin.Boolean?
  • Java Math como classs en Kotlin
  • ¿Cuál es la coincidencia de versión correcta entre kotlin-gradle-plugin y kotlin-js-library?
  • ¿Cómo crear una matriz genérica llena de nulos en Kotlin?
  • Aplicación de Android sin classs?
  • Pasar un object detector como un parámetro de function en kotlin
  • Kotlin JS Anulación de la function 'externa' con error de parameters opcionales
  • Acerca de Kotlin y funciones
  • Cómo instanciar una nueva instancia de tipo genérico