¿Cómo usar Anko DSL dentro de un Fragmento?

La página wiki de Github muestra este ejemplo para ser usado en la instancia de Activity :

 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) verticalLayout { padding = dip(30) editText { hint = "Name" textSize = 24f } editText { hint = "Password" textSize = 24f } button("Login") { textSize = 26f } } } 

¿Cómo hacer lo mismo dentro de un Fragment ?

Intenté poner ese bloque verticalLayout en onCreateView pero el método no puede ser resuelto. He añadido la dependencia de anko-support-v4 , pero todavía no hay suerte.

3 Solutions collect form web for “¿Cómo usar Anko DSL dentro de un Fragmento?”

Con Anko 0.8 también puede usar un AnkoComponent , si desea mantener su interfaz de usuario en una clase aparte para que pueda volver a usarla en otro lugar.

 class FragmentUi<T>: AnkoComponent<T> { override fun createView(ui: AnkoContext<T>) = with(ui) { verticalLayout { // ... } } } 

Puedes llamarlo en tu fragmento onCreateView() por

 override fun onCreateView(inflater: LayoutInflater, container: ViewGroup, savedInstanceState: Bundle?): View = FragmentUi<Fragment>().createView(AnkoContext.create(ctx, this)) 

Después de desenterrar el código fuente anko-support-v4 , más algunos ensayos y errores, he encontrado una solución aunque no estoy seguro si es la forma correcta / recomendada. Parece un poco indocumentado.

Una muestra de mi Fragment código:

 override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? { return UI { verticalLayout { linearLayout { avatar = imageView().lparams(width = dip(48), height = dip (48)) name = textView().lparams(width = 0, weight = 1f) } linearLayout { // ... } } }.toView() } 

Estoy regresando DSL diseño envuelto en UI { ... }.toView() en Fragment.onCreateView(...)

A partir de anko 0.8.1 el código correcto sería:

 override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? { return UI { verticalLayout { linearLayout { // ... } linearLayout { // ... } } }.view } 
  • Kotlin - La forma más idiomática de convertir una lista a una MutableList
  • Kotlin android proguard error
  • java.lang.ClassNotFoundException: com.intellij.junit5.JUnit5IdeaTestRunner usando spek en kotlin
  • Variable 'runnable' debe ser inicializado
  • Cómo usar Realm's en el método con Kotlin
  • ¿Tiene Kotlin personalizado obtener la llamada al método de ejecución
  • Kotlin lateinit propiedades, NPE peligro?
  • Daga de referencia no resuelta 2 + kotlin + androide gradle
  • Creación de servicio sin consolidar en Kotlin
  • ¿Es Kotlin 100% compatible con ART en Android?
  • Kotlin en Android: asigna un cursor a una lista
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.