0

我有一个带有 TextView 的适配器。TextView 要么包含一个字符串,要么包含一个 SpannableString,这取决于文本是否可点击。但是,我注意到当视图被回收时,有时它会失去点击能力。我认为 SpannableString 再次成为 String 。

有谁知道这是为什么或对如何解决有任何建议?我正在使用 ViewHolder(以防有人想知道)以及 CustomObject(处理要返回的字符串类型)。

@Override
public View getView(int pos, View view, ViewGroup viewGroup) {

    final ViewHolder tag;

    if (view == null) {

        view = mInflater.inflate(R.layout.custom_layout, viewGroup, false);

        tag = new ViewHolder(
                (ImageView) view.findViewById(R.id.imageView1),
                (TextView) view.findViewById(R.id.textView1),
                (TextView) view.findViewById(R.id.textView2),
                mItems.get(pos));

        view.setTag(tag);

    } else {
        tag = (ViewHolder) view.getTag();
    }

    tag.item = mItems.get(pos);

    tag.tv1.setText(tag.item.getName());
    tag.tv2.setText(tag.item.getMsg());

    return view;
}

private final class ViewHolder {
    private final TextView tv1, tv2;
    private final ImageView iv;
    private CustomObject item;

    public ViewHolder (ImageView iv, TextView tv1, TextView tv2, CustomObject item) {
        this.iv = iv;
        this.tv1 = tv1;
        this.tv2 = tv2;
        this.item = item;
    }
}

~~编辑~~

事实证明,问题在于我如何解析链接的字符串。我检查了多个链接的字符串,并且我有一个标志,根据它是否已到达字符串的末尾来检查它。当视图被回收时,该标志仍​​然设置为完成,因此它没有重新格式化(尽管在我的 CustomObject 中存储为最终处理的 SpannableString 对象)。现在我将其设置为重置标志,以便在必要时再次处理。不知道为什么它需要重新处理一些时间。

4

0 回答 0