android – 链接跨度从ListView的convertView中丢失

为什么滚动时ListView中的链接会丢失?从调试中可以清楚地看到,转换不会在convertView的TextView上第二次添加.

这是从适配器的getView调用的一段代码.

    ...
    String body = MyItemDetails.getBody(); // String to linkify

    final Spannable spannable = MyCustomUri.addHashtagSpans(context,body);
    viewHolder.textView.setText(spannable);

    viewHolder.textView.setTextIsSelectable(true); // adds additional spans
    viewHolder.textView.setMovementMethod(ArrowKeyMovementMethod.getInstance());
    viewHolder.textView.setAutoLinkMask(Linkify.WEB_URLS);
    ...

MyCustomUri.addHashtagSpans()使用扩展URLSpan创建带有MyCustomSpan的SpannableString.

问题是当我在ListView链接中上下滚动时丢失.而当屏幕第一次打开时,它设置正确.

现在我通过禁用convertView的重用做了一个脏修复:(任何想法如何更好地解决这个问题?

最佳答案
当textview的数据写入包裹以进行保留时,某些可跨越的信息可能会丢失.

TextView.onSaveInstanceState(),TextView.onRestoreInstanceState()TextView.SavedState.

确定android将保留和不保留的内容通常会非常令人沮丧.我经常在我的视图上设置setSaveEnabled(false)来禁用基本小部件的不可预测的默认行为.

此外,视图模式仅用于保留视图/布局实例层次结构.为了避免每次getView()需要充气或查找视图.在从getView()呈现视图时,更新视图的数据始终是您的责任.

您不需要完全禁用视图模式,而只是简单地每次getView()更新文本,就像您可能已经在做的那样.

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...