Kotlin и Android TextWatcher с функциями CharSequence / String

Я просто играю с Kotlin в своем проекте, и я пришел к странной проблеме … При попытке конвертировать пользовательскую студию EditText Android перестает отвечать. Когда я попытался преобразовать его по частям, он перестает отвечать на запросы при преобразовании этого фрагмента кода:

 private TextWatcher editor = new TextWatcher() { long newMicro = 0; @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { s = s.toString().replace(".", "") .replace(",", "") .replace("$", ""); try { newMicro = Long.parseLong(s.toString()); } catch (Exception e) { newMicro = 0; } } @Override public void afterTextChanged(Editable editable) { removeTextChangedListener(editor); setMicroUnits(newMicro); addTextChangedListener(editor); } }; 

Испытывали ли вы такое поведение? Я не могу переопределить этот TextWatcher в Kotlin, так как я не могу выполнить ни

CharSequence.toString().replace()

ни

CharSequence.replace()

Любая идея, как реализовать пользовательский TextWatcher в Котлине? Это код, который я подготовил:

 val editor = object : TextWatcher { override fun afterTextChanged(p0: Editable?) { } override fun beforeTextChanged(p0: CharSequence, p1: Int, p2: Int, p3: Int) { } override fun onTextChanged(p0: CharSequence, p1: Int, p2: Int, p3: Int) { } } 

Изменить: проблема возникает при работе с версией 1.1.2-4 на Android Studio 3 Preview 6

Я просто попытался преобразовать ваш код в Kotlin в Android Studio, и он тоже повесился. Я предполагаю, что это проблема с параметрами NULL в методах интерфейса TextWatcher.

Во всяком случае, этот фрагмент кода должен быть тем, что вы ищете:

 private val editor = object : TextWatcher { var newMicro: Long = 0 override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { } override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { val text = s.toString().replace(".", "") .replace(",", "") .replace("$", "") try { newMicro = java.lang.Long.parseLong(text) } catch (e: Exception) { newMicro = 0 } } override fun afterTextChanged(s: Editable?) { removeTextChangedListener(this) setMicroUnits(newMicro) addTextChangedListener(this) } } 

Таким образом, похоже, что это не только моя проблема, которую TextWatcher висит при конвертировании. Он перестает отвечать каждый раз. Моя проблема заключалась в том, что я не смог использовать Kotlins String.replace()

Решение состояло только в том, чтобы использовать правильные версии Kotlin AndroidStudio 3.0 preview 6 с kotlin_version = '1.1.3-2'