TextView を備えたアダプターがあります。TextView には、テキストがクリック可能かどうかに応じて、String または 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;
}
}
~~ 編集 ~~
問題は、リンクの文字列を解析する方法にあったことが判明しました。複数のリンクの文字列をチェックし、文字列の最後に到達したかどうかに応じてチェックされるフラグを持っています。ビューがリサイクルされると、フラグはまだ終了に設定されているため、再フォーマットされませんでした (最終的に処理された SpannableString オブジェクトとして CustomObject に格納されているにもかかわらず)。必要に応じて再度処理できるように、フラグをリセットするように設定しました。ただし、時々再処理する必要がある理由はわかりません。