gpt4 book ai didi

android - 链接范围从 ListView 的 convertView 中丢失

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:46:09 25 4
gpt4 key购买 nike

为什么 ListView 中的链接在滚动时丢失了?从调试中可以清楚地看出,不会在 convertViewTextView 上第二次添加跨度。

这是从适配器的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com