如何通过Kotlin在ListView上获取已检查的ID?

时间:2016-11-29 09:47:17

标签: android listview kotlin

我尝试从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的ids吗? 我应该以某种方式创建一个扩展方法来迭代SparseBooleanArray? 或者,也许还有其他方式?

2 个答案:

答案 0 :(得分:3)

您可以使用以下代码遍历数组:

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

答案 1 :(得分:1)

  

据我所知,Kotlin无法迭代SparseBooleanArray

Kotlin的for可以迭代任何内容,如果它提供iterator(),无论是方法还是扩展函数。以下是details

您可以将SparseBooleanArray#iterator实现为扩展功能,并让代码正常工作。