我尝试将listView中的文本设置为我的FavJokes类中的字符串值。
class FavJokes {
var index: Int? = null
var string: String? = null
}
当用户收到一个笑话时,我创建一个FavObject实例并为索引分配值(因为Jokes存储在数组中)和笑话的字符串值。
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值?
答案 0 :(得分:0)
在Android中,您在列表视图上设置一个适配器,然后添加一个setOnItemClickListener,在调用时将提供列表中项目的索引。
最简单的适配器之一是ArrayAdapter。
以下是熟悉来源的tutorial。
以下是一些现有代码的快速示例。
在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)
}
}
完整对象保留在列表中,适配器仅用于选择列表视图中显示的内容,然后获取选择的索引,然后使用该索引从源列表中提取完整对象。 / p>