¿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 } 
  • Retrofit2 + SimpleXML en Kotlin: MethodException: La anotación debe marcar un método set o get
  • Kotlin - La forma más idiomática de convertir una lista a una MutableList
  • ¿Kotlin Android Extensions pone en caché las propiedades sintéticas o cada vez que llama a findViewById ()?
  • HttpLoggingInterceptor no registra con retrofit 2
  • Call class 'constructor por reflexión con Kotlin
  • WeakReference no funciona en Kotlin
  • Advertencia: Advertencia: Versión de origen compatible 'RELEASE_7' del procesador de anotaciones 'android.arch.lifecycle.LifecycleProcessor' less than -source '1.8'
  • Este tipo tiene un constructor y debe ser inicializado aquí - Kotlin
  • Cómo crear un constructor vacío para la clase de datos en Kotlin Android
  • Asociar la certificación para desarrolladores de android
  • ¿Cómo hacer referencia a otras opiniones en Anko DSL?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.