【问题标题】:How to get checked ids at ListView via Kotlin?如何通过 Kotlin 在 ListView 中获取检查的 ID?
【发布时间】:2016-11-29 09:47:16
【问题描述】:

我尝试从我的 ListView 中获取选中的项目:

 val lvPlayers = findViewById(R.id.ListViewAllPlayers) as ListView;
    lvPlayers.choiceMode = ListView.CHOICE_MODE_MULTIPLE;
    lvPlayers.adapter = adapter

    lvPlayers.setOnItemClickListener { 
            adapterView: AdapterView<*>, view1: View, i: Int, l: Long ->
        Toast.makeText(applicationContext,lvPlayers.checkedItemCount.toString(),
                Toast.LENGTH_SHORT).show();
        var checked = lvPlayers.checkedItemIds;
        SharedData.SelectedPlayers.clear();
        for (ch in checked) {
            SharedData.SelectedPlayers.add(players.get(ch.toInt()));
        }
    }

但这对我不起作用。
我尝试使用来自 this question 的代码,但据我了解,Kotlin 无法迭代 SparseBooleanArray

那么,你能帮我检查一下 ListView 的 id 吗?
我应该以某种方式创建一个扩展方法来迭代SparseBooleanArray吗? 或者,也许是其他方式?

【问题讨论】:

标签: android listview kotlin


【解决方案1】:

你可以通过它的索引遍历数组:

for (i in 0..a.size()-1) {
    //access to a[i]
}

另请参阅rangesfor loop

2017 年 3 月 27 日编辑:

您也可以使用Collection<*>.indices,这是等效的

for (i in a.indices) {
    //access to a[i]
}

【讨论】:

  • 你忘记了size - 1
【解决方案2】:

我明白了,Kotlin 不能迭代 SparseBooleanArray

Kotlin 的for 可以遍历任何东西,如果它提供了iterator(),无论是方法还是扩展函数。这是details

您可以将SparseBooleanArray#iterator 实现为扩展函数并让您的代码正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-14
    • 2011-12-23
    • 1970-01-01
    • 1970-01-01
    • 2021-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多