GridView
のリストを表示するために使用していますImageView
。画像は、ImageLoaderライブラリを介してインターネットからロードされます。カスタムアダプタ(拡張)も実装しましたBaseAdapter
:
public class ImagePreviewAdapter extends BaseAdapter {
private Context mContext;
private List<LastPost> mPosts = new ArrayList<LastPost>();
private ImageLoader mImageLoader;
private ImageLoadingListener mLoadingListener;
public ImagePreviewAdapter(Context context, List<LastPost> posts, ImageLoadingListener listener) {
this.mContext = context;
this.mPosts = posts;
this.mLoadingListener = listener;
Activity activity = (Activity)mContext;
this.mImageLoader = ((MeanwhileInRussia)activity.getApplication()).getImageLoader();
}
public int getCount() {
return mPosts.size();
}
public LastPost getItem(int position) {
return mPosts.get(position);
}
public long getItemId(int position) {
LastPost post = mPosts.get(position);
return Long.parseLong(post.getId());
}
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
// if it's not recycled, initialize some attributes
if (convertView == null) {
imageView = new ImageView(mContext);
imageView.setLayoutParams(new GridView.LayoutParams(125, 125));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(0, 0, 0, 0);
String imageLink = mPosts.get(position).getImageurl();
DisplayImageOptions displayImgOptions = ImageLoaderConfigUtil
.getDisplayImageOptions(mContext);
if (mLoadingListener != null) {
mImageLoader
.displayImage(imageLink, imageView, displayImgOptions, mLoadingListener);
} else {
mImageLoader.displayImage(imageLink, imageView, displayImgOptions);
}
} else {
ImageView restoringView = (ImageView)convertView;
imageView = restoringView;
}
return imageView;
}
}
システムがメソッドを呼び出すたびにgetView()
、新しいImageView
オブジェクトを作成し、ImageLoaderに画像を入れるように依頼します(もちろん、convertView == nullの場合)。URLの最初の部分では、すべてが正常に機能します。しかし、私の問題は2番目の部分から始まりGridView
ます。最初の部分のコピーだけで新しい画像はありません...問題はどこかに隠れていることに気づきましたconvertView == null
:すべての理論的に新しい要素について、このチェックは常にFALSEです!そして、新しいオブジェクトを作成してURLから画像をロードする代わりに、私のコードはいくつかの古いオブジェクトを新しい位置に配置します。興味深い事実:getItemId(position)
メソッドは、LastPostオブジェクトの正しいIDを返します。これは、正しいLastPostsオブジェクトのアダプターに誤ったビューがあることを意味しますか?
助言がありますか?ありがとう!