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

时间:2017-11-15 23:56:27

标签: arrays listview kotlin

我尝试将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值?

1 个答案:

答案 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>