从对象中提取文本值以设置listView中的文本

我试图将我的listView中的文本设置为我FavJokes类中的字符串值。

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

当用户喜欢一个笑话时,我创建一个FavObject实例,并为其分配值(因为笑话存储在一个数组中)和笑话的字符串值。

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

当我尝试使用这个FavJoke对象的数组作为我的listView的数据源,我看到的是我的项目ID和“.FavJokes @ ee8e3e”显示在listView本身。

我不认为我应该使用字符串值来填充listView,因为对于我的setOnItemClick {}方法,我继续使用的视图将需要笑话的索引,以便用正确的笑话来填充textView 。

我是kotlin / Java的新手,3天前开始学习,但是我确实有一些Swift的经验。 在Swift中,我可以使用IndexPath对象来获取/设置我的tableView的值。 有没有这样的对象或方法,我可以访问和设置Kotlin / Java中的TextView.text值?

在Android中,你在列表视图上设置一个适配器,然后添加一个setOnItemClickListener,当被调用的时候,它将被提供列表中的项目索引。

一个最简单的适配器是一个ArrayAdapter 。

这里是一个熟悉的来源的教程 。

这里是一些现有代码的一个简单例子。

在OnCreateView我得到我的列表视图。

  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 } 

然后在我的onResume中,我收到一个对象数组,然后用它来创建我的适配器。

  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() }) 

然后在setupListView()中,将适配器分配给列表视图并添加一个监听器。

  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) } } 

完整对象保留在列表中,适配器仅用于选择列表视图中显示的内容,然后获取选择的索引,然后使用该索引从源列表中提取完整对象。