#android #kotlin
#Android #kotlin
Вопрос:
У меня есть этот фрагмент кода в Kotlin для Android, и мне нужно применить append к messageReceived
переменной. Как я могу это сделать?
private lateinit var messageReceived: TextView
this.messageReceived = findViewById(R.id.messageRreceived)
private fun updateReceivedMessage(newPayload: String) {
runOnUiThread { messageReceived.text = newPayload }
}
Комментарии:
1. Привет @w1ll, не могли бы вы поделиться тем, что вы именно хотите. Я не смог правильно понять вашу проблему. Подробное описание ожидаемого результата вместе с тем, что вы сделали до сих пор, поможет намного лучше
2.
messageReceived
это представление, что такоеappned
? Чего ты хочешьappned
?
Ответ №1:
Сначала получите текст, а затем установите новый текст
private fun updateReceivedMessage(newPayload: String) {
runOnUiThread {
val previousText = messageReceived.text.toString()
messageReceived.text = "$previousText $newPayload"
}
}
Возможно, вы могли бы сделать его более читаемым с помощью разрыва строки
messageReceived.text = "$previousTextn$newPayload"
Комментарии:
1. Это тоже хороший подход, но он создает новую переменную необязательно. поскольку у вас есть метод обновления, который может вызываться несколько раз, и создание переменной каждый раз не является хорошей практикой. Вы можете использовать объявление глобальной переменной, но вы можете сделать это без каких-либо дополнительных возможностей. смотрите мой ответ.
2. Современные компиляторы игнорируют дополнительные переменные для оптимизации, на данный момент это заданный факт, в любом случае сделал POC и проверил правильность моей информации codepile.net/pile/V4eLzAX8 двойной сдвиг в Intellij Idea, отображение байтового кода, декомпиляция и создание новых переменных не происходит. Предлагаемая вами оптимизация выполняется автоматически, и, следовательно, изменение кода должно быть приоритетным.
3. Спасибо за дополнительную информацию, я этого не знал.
Ответ №2:
Если вы хотите добавить текстовое сообщение, то вместо прямого ввода «newPayload» перейдите с
messageReceived.text = messageReceived.text.toString() newPayload
or
messageReceived.text = messageReceived.text.toString().plus(newPayload)