Android TextView Медленное Использование append () Сотни раз - решение? - PullRequest
2 голосов
/ 04 декабря 2011

У меня есть редактор исходного кода для Android, и у меня есть счетчик номеров строк, который находится слева от основного EditText с исходным кодом внутри него.

У меня есть следующая функция, которую я использую для обновления текстового представления номеров строк:

String lineDelimiter = "\n";
public void updateLineNumbers(){
    int lines = textBox.getLineCount();
    lineNums.setText(1 + lineDelimiter);
    for(int i = 2; i < lines; i++){
      lineNums.append(i + lineDelimiter);
    }
}

Все это хорошо, но проблема в том, что когда у вас есть документ с 200 нечетными строками, вы начинаете замечать небольшую задержку при добавлении строк. Это связано с тем, что методы setText / append в Android TextView немного медленные? Или это задержка вызывает задержку?

Я также создал аналогичную функцию, которая добавляет номер строки, когда пользователь добавляет номер строки, и наоборот, в отличие от очистки TextView и добавления номеров каждой строки снова, как это делает функция выше. Но эта функция по-прежнему отстает от приложения, когда пользователь добавляет / удаляет строки.

Как я могу это остановить? Я не могу думать о том, что делать, и это напрягает меня, потому что это отстает от моего приложения и делает его непригодным для больших файлов! (

Спасибо за внимание!


РЕШЕНИЕ

Я нашел способ иметь быстрые номера строк, то есть использовать собственный TextView с переопределением onDraw (Canvas canvas) и рисовать их таким образом, что приводит к номерам строк без задержек:).

1 Ответ

1 голос
/ 04 декабря 2011

Является ли это причиной того, что методы setText / append в Android TextView немного медленные? Или это задержка вызывает задержку?

Используйте Traceview и узнайте.

Если бы не манжета, я бы предположил, что вызов append() целую кучу раз на TextView будет значительно медленнее, чем вызов append() кучу раз на StringBuilder, затем один раз вызов setText() на TextView.

Как я могу это остановить?

Не обрабатывайте номера строк таким образом. Например, поместите TextView слева от EditText и укажите номера строк в TextView, по одному на строку.

...