Problema de context al usar Anko DSL dentro del adaptador personalizado para ListView

Estoy intentando escribir un adaptador de propósito general para ListView que permite usar Anko DSL como el contenido de los artículos. El código se enumera a continuación. Como puede ver, hay un parche feo with(viewGroup!!.context) para hacer que el código funcione. No le gusta el otro ejemplo de Anko que hayas visto. Si elimino la statement with , mi aplicación se bloqueará

 FATAL EXCEPTION: java.lang.ClassCastException: android.widget.FrameLayout$LayoutParams cannot be cast to android.widget.AbsListView$LayoutParams 

¿Hay alguna manera de evitar la statement with ?

 import java.util.* import android.view.View import android.view.ViewGroup import android.widget.BaseAdapter class AnkoAdapter(itemFactory: () -> AbstractList<Any>, viewFactory: (index: Int, items: AbstractList<Any>, view: View?, viewGroup: ViewGroup?) -> View): BaseAdapter() { val viewFactory = viewFactory val items: AbstractList<Any> by lazy { itemFactory() } override fun getView(index: Int, view: View?, viewGroup: ViewGroup?): View { return viewFactory(index, items, view, viewGroup) } override fun getCount(): Int { return items.size } override fun getItem(index: Int): Any { return items.get(index) } override fun getItemId(index: Int): Long { return items.get(index).hashCode().toLong() + (index.toLong() * Int.MAX_VALUE) } } // ------------- // In main acitivty. ... val items = listOf<String>("Mary", "Lisa", "Cheryl", "Linda") val buttonCaption = "..." listView.adapter = AnkoAdapter({items as AbstractList<Any>}) { index: Int, items: AbstractList<Any>, view: View?, viewGroup: ViewGroup? -> with(viewGroup!!.context) { linearLayout { textView(items[index].toString()) button(buttonCaption) } } } 

De acuerdo con este video , aquí está la versión modificada:

 class AnkoAdapter<T>(itemFactory: () -> List<T>, viewFactory: Context.(index: Int, items: List<T>, view: View?) -> View): BaseAdapter() { val viewFactory = viewFactory val items: List<T> by lazy { itemFactory() } override fun getView(index: Int, view: View?, viewGroup: ViewGroup?): View { return viewGroup!!.context.viewFactory(index, items, view) } override fun getCount(): Int { return items.size } override fun getItem(index: Int): T { return items.get(index) } override fun getItemId(index: Int): Long { return (items.get(index) as Any).hashCode().toLong() + (index.toLong() * Int.MAX_VALUE) } } val items = listOf<String>("Mary", "Lisa", "Cheryl", "Linda") val buttonCaption = "..." lockView.adapter = AnkoAdapter<String>({ items }) { index, items, view -> linearLayout { textView(items[index]) button(buttonCaption) } } 
  • Error XML de Android Studio "Controlador de método correspondiente no encontrado" en onClick
  • Cómo cambiar el ancho de un elemento secundario FlexBox después de agregarlo a FlexBox
  • Crear paginador de visualización mediante progtwigción en la barra de tabs, pero el contenido de paginador de vista se desplaza por las tabs
  • Cómo corregir recrear mediante progtwigción Layout
  • Inflar el file xml binary de exception en Windows
  • ¿Cómo explicar este extraño comportamiento al establecer márgenes programáticamente a una vista dentro de RelativeLayout?
  • Después de agregar layouts mediante progtwigción, ¿cómo puedo cambiar la vista de text "#" con el button?
  • Restricción del layout de la falla intermitente del layout
  • Diferencia entre protegido y sin