2016-11-29 19 views
1

私は私のListViewコントロールからチェックされた項目を取得しよう:Kotlin経由でListViewでチェックIDを取得する方法は?

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を繰り返し処理する拡張メソッドを作成する必要がありますか? または、別の方法ですか?

+0

コードのフォーマットはオフです。 – voddan

+0

を修正してください。http://stackoverflow.com/a/19414593/2392960 – Januson

答えて

1

私が理解し、Kotlinは反復

SparseBooleanArrayオーバー

Kotlinのforは、それがiterator()を提供する場合、それは方法や拡張機能も、何を反復処理することができますすることはできません。ここにはdetailsがあります。

拡張機能としてSparseBooleanArray#iteratorを実装して、コードを動作させることができます。

2

あなたがして、そのインデックスによって配列を反復処理することができます:あなたはまた、あるCollection<*>.indicesを使用することができます

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

も参照してくださいrangesfor loop

編集2017年3月27日同等物

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

あなたは 'size - 1'を忘れてしまいました。 – voddan

関連する問題