Как воспроизвести добавление в runOnUiThread с помощью Kotlin на Android

#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)