カスタム ArrayAdapter を使用してリストを作成する ListFragment を実装しています。各行アイテムには、ImageView と 3 つの TextViews があります。データは XML 経由で解析され、画像は非同期で読み込まれます。
私が抱えている問題は、ListView が読み込まれて見栄えが良いことですが、スクロール時に問題があります。画面に一度に 7 個のアイテムを収めることができます。8行目までスクロールすると、突然変化して、次の行が表示されるはずです。8 で割り切れる行 (つまり、行 8、16、24 など) でのみ実行されます。
この ListView で速度を確保するために、ViewHolder パターンを使用しています。問題はどこかにあると思いますが、検索したところ、このパターンを正しく実行しているようで、この問題を解決するためにチェックするものが不足しているようです。私は何を間違っていますか?ありがとう!
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
MyViewHolder holder;
if (row == null) {
LayoutInflater inflater = LayoutInflater.from(mContext);
row = inflater.inflate(R.layout.browse_result_list_item, null, false);
holder = new MyViewHolder();
holder.adTitle = (TextView) row.findViewById(R.id.adTitle);
holder.region = (TextView) row.findViewById(R.id.region);
holder.time = (TextView) row.findViewById(R.id.time);
holder.thumbnail = (ImageView) row.findViewById(R.id.browseThumbnail);
row.setTag(holder);
} else {
holder = (MyViewHolder) row.getTag();
}
SearchResult result = mObjects.get(position);
holder.adTitle.setText(result.getTitle().substring(0, result.getTitle().length()-3)); // three ... at the end, remove them
holder.region.setText(result.getRegion());
holder.time.setText(result.getPostingTime());
// Download the image thumbnail
ArrayList<String> urls = result.getImageUrls();
if (urls.size() > 0)
download(urls.get(0), holder.thumbnail);
else // No image for this post, put a placeholder
holder.thumbnail.setImageResource(R.drawable.ic_action_picture);
return row;
}
private static class MyViewHolder {
public static TextView adTitle;
public static TextView region;
public static TextView time;
public static ImageView thumbnail;
}
編集: @frozenkoi のおかげで解決策が見つかりました。問題を引き起こすViewHolder内の静的変数になってしまいました。それらは現在単にパブリックであり、クラスは静的であり、問題は解決されています。