目前,我在每个孩子中都有一个带有TextView的ListView。该TextView将使用Spanned字符串进行填充。我正在使用ViewHolder模式,并且没有在getView()中解析Spanned字符串。当我从Spanned字符串切换回普通字符串时,ListView的滚动性能大大提高。我想继续使用Spanned,因为它可以即时正确格式化我的文本。
他们是否可以在保持TextViews 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;
}
最佳答案
尽管我没有找到问题的原因,但确实找到了解决上述问题的解决方法。
调用getBody()返回一个Spanned对象,该对象在getView()的每次迭代中都导致异常数量的垃圾回收。当我将Spanned转换为String时,问题就消失了。这是我修改以解决该问题的代码。
holder.body.setText(array.get(position).getBody()**.toString()**);
尽管我仍然想找到一个确凿的理由来说明为什么会发生这种情况。