AlbertB:
私はJavaで、以下の機能を持っていると私はKotlinに変換する必要があります。
@Override
public void afterTextChanged(Editable s) {
if (s != null && !"".equals(s.toString())) {
int position = (Integer) mHolder.numEdit.getTag();
// Saved to the data variable when the data changes
mData.get(position).put("list_item_inputvalue",
s.toString());
}
}
これは私が作成したことと等価Kotlinコードです:
override fun afterTextChanged(s: Editable?) {
if (s != null && "" != s.toString()) {
val position = mHolder.numEdit!!.tag as Int
// Saved to the data variable when the data changes
mData?.get(position).put("list_item_inputvalue", s.toString())
}
}
コンパイラはへの呼び出しが好きではありません.put()
。Javaで変数MDATAは、次のとおりです。
private List<Map<String, String>> mData;
そして、Kotlin:
var mData: List<Map<String, String>>? = null
しないのはなぜの変換のようなコンパイラput
Kotlinで?
更新:
println(mData) = [{list_item_inputvalue=0}, {list_item_inputvalue=1},...]
println(mData?.get(position)) = {list_item_inputvalue=8}
スティーブ:
あなたの質問では、この文の周りにあなたの問題センター:
var mData: List<Map<String, String>>? = null
Kotlinでは、Map
タイプは不変であるので全く持っていない.put()
方法を。それはあなたが直面して実行している問題です。それを修正するには、ちょうどこの文を次のように変更します
var mData: List<MutableMap<String, String>>? = null
二番目の '?' 後に必要であるmData?.get(position)
という文が返されますので、null
場合mData == null
。つまり、そのステートメントは、の型を返すMutableMap<String, String>?
にもかかわらず、.put()
それ自体ではのタイプを返しますMutableMap<String, String>
。
要約すると...あなたが変更可能なマップのリストを作成した場合、コンパイラはその文と幸せになります。
mData?.get(position)?.put("list_item_inputvalue", s.toString())