Проблема с производительностью - ListView, TextView с составным входом в каждом дочернем элементе - PullRequest
1 голос
/ 18 апреля 2011

В настоящее время у меня есть ListView с TextView в каждом дочернем элементе. Это TextView принимает Spanned строку, чтобы заполнить ее. Я использую шаблон ViewHolder, и я не анализирую строку Spanned в getView (). Когда я переключаюсь с Spanned-строки обратно на обычную строку, производительность прокрутки ListView резко возрастает. Я хотел бы продолжать использовать Spanned, потому что он будет правильно форматировать мой текст на лету.

Способ повысить производительность моего ListView при сохранении строкового ввода для моих объединенных текстовых представлений?

@Override
public View getView(final int position, View convertView, final ViewGroup parent) {
    final ViewHolder holder;

    if (convertView == null) {
        convertView = inflater.inflate(R.layout.comment, null);

        holder = new ViewHolder();
        holder.userName = (TextView) convertView.findViewById(R.id.comment_user_name);
        holder.date = (TextView) convertView.findViewById(R.id.comment_created_date);
        holder.body = (TextView) convertView.findViewById(R.id.comment_body);

        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    User user = array.get(position).getCreatedBy();
    holder.userName.setText(user.getName());
    holder.date.setText(array.get(position).getDateCreated());
    holder.body.setText(array.get(position).getBody());

    return convertView;
}

1 Ответ

1 голос
/ 07 сентября 2011

Хотя я не выяснил причину проблемы, я нашел обходной путь для устранения проблемы, указанной выше.

Вызов getBody () возвращал Spanned объект, который вызывал необычное количество сборки мусора при каждой итерации getView (). Когда я преобразовал Spanned в строку, проблема исчезла. Это код, который я изменил, чтобы исправить проблему.

holder.body.setText(array.get(position).getBody()**.toString()**);

Хотя я все же хотел бы найти вескую причину того, почему это происходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...