为什么 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()
使用 MyCustomSpan
和扩展 URLSpan
创建一个 SpannableString
。
问题是,当我在 ListView
中上下滚动时,链接丢失了。而当屏幕第一次打开时,它设置正确。
现在我通过禁用 convertView
的重用做了一个肮脏的修复 :( 有什么想法可以更好地解决这个问题吗?
最佳答案
当 textview 的数据被写入包裹以保留时,一些可跨越的信息可能会丢失。
参见 TextView.onSaveInstanceState() , TextView.onRestoreInstanceState() , 和 TextView.SavedState .
确定 android 将保留和不保留的内容通常会非常令人沮丧。我通常只是在我的 View 中使用 setSaveEnabled(false)
来禁用基本小部件不可预测的默认行为。
此外,viewholder 模式仅真正用于保留 View /布局实例层次结构。为了让您不必在每次 getView()
时膨胀或查找您的 View 。从 getView()
呈现 View 时,更新 View 数据始终是您的责任。
您不需要完全禁用 viewholder 模式,只需在每次 getView()
时更新文本,就像您可能已经在做的那样。
关于android - 链接范围从 ListView 的 convertView 中丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21183448/