Это мой код, но он не перерисовывается, когда я говорю об этом.
invalidate()
не происходит сразу, когда вы звоните.invalidate()
, как и append()
, и все, что связано с пользовательским интерфейсом, помещает сообщение в очередь сообщений, которое будет обрабатываться основным потоком приложения, как только вы его разрешите.Поскольку вы тратите время пользователя на бессмысленные sleep()
вызовы, а также выполняете флэш-ввод-вывод в цикле основного потока приложения, основной поток приложения не может обрабатывать сообщения в очереди сообщений.Он будет обрабатывать все ваши invalidate()
и append()
вызовы после завершения цикла, и вы возвращаете управление Android с любого обратного вызова.
Предполагается, что он будет перерисовываться после каждой строки,добавлен в текстовое представление
Нет, это не так.
но он все еще только перерисовывается в конце?
Исправить.
Простое решение - избавиться от invalidate()
и Thread.sleep(10)
и просто загрузить все содержимое файла в ваш TextView
за один вызов.
Лучшее решение -чтобы вы могли прочитать весь файл через AsyncTask
, а затем добавить текст к TextView
за один вызов в onPostExecute()
.При необходимости используйте ProgressDialog
или что-то еще, чтобы развлечь пользователя, пока это происходит.