Extrae el valor de text de un object para establecer el text en una list

Estoy intentando configurar el text de mi list Vista en el valor de cadena en mi class FavJokes.

class FavJokes { var index: Int? = null var string: String? = null } 

Cuando un usuario prefiere una broma, creo una instancia de FavObject y le asigno valores para el índice (ya que los Jokes se almacenan en una matriz) y el valor de cadena de la broma.

 val newFav = FavJokes() newFav.index = primaFreeze!! newFav.string = ("${questionProvider.quesRegistry[primaFreeze!!]}... ${answerProvider.ansRegistry[primaFreeze!!]}") favorites.add(newFav) 

Cuando trato de usar esta matriz de objects FavJoke como el origen de datos para mi list, veo lo que veo es mi id del proyecto y ".FavJokes @ ee8e3e" aparece en la listView.

No creo que deba rellenar ListView con solo el valor de cadena para la broma, porque para mi método setOnItemClick {}, la vista a la que segue va a necesitar el índice de la broma para llenar el textView con la broma correcta. .

Soy nuevo en kotlin / Java comencé a aprenderlo hace 3 días, pero tengo algo de experiencia en Swift. En Swift podría usar un object IndexPath para get / establecer los valores para mi tableView. ¿Hay algún object o método al que pueda acceder y establecer los valores de TextView.text en Kotlin / Java?

En Android, configura un adaptador en la vista de list y luego agrega un setOnItemClickListener, que cuando se lo llame se proporcionará con el índice del elemento en la list.

Uno de los adaptadores más simples es un ArrayAdapter .

Aquí hay un tutorial de una fuente familiar.

Y aquí hay un ejemplo rápido de algún código existente.

en OnCreateView obtengo mi vista de list.

  override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? { // Inflate the layout for this fragment val rootView = inflater!!.inflate(R.layout.fragment_target_selection, container, false) targetList = rootView.findViewById(R.id.names_list) as ListView return rootView } 

luego en mi onResume recibo una serie de objects que luego uso para crear mi adaptador.

  disposables.add(telescopeInterface.namesListStream.subscribe { println("here is the names list") namesList = it namesListAdapter = ArrayAdapter(this.context, android.R.layout.simple_list_item_1, namesList?.names) println("setting up list view with the updated list") setupListView() }) 

luego en setupListView () asigno el adaptador a la vista de list y agrego un oyente.

  private fun setupListView() { namesListAdapter?.let { targetList.adapter = it } targetList.setOnItemClickListener { adapterView, view, i, l -> targetSelectionListenter?.targetSelected() val entry = adapterView.getItemAtPosition(i) println("item $entry") telescopeInterface.sendSelectedTarget(entry as DSOCatalogNameEntry) } } 

El object completo permanece en la list, el adaptador solo se usa para seleccionar lo que se muestra en la vista de list, luego obtiene el índice de la selección, que luego usa para extraer el object completo de su list fuente.

  • Cómo convertir String array a Int array en Kotlin?
  • ¿Cómo comparar dos matrices en Kotlin?
  • ¿Es posible pasar la reference al elemento i-ésimo de una matriz primitiva?
  • ¿Cómo crear una matriz vacía en kotlin?
  • Acoplar arreglo en Kotlin
  • Llamadas seguras en Kotlin con Array es confuso
  • Kotlin: forma idiomática de comprobar la matriz contiene valor
  • ¿Cómo implementar readLine () !!. ToIntArray () en Kotlin?