0

インターネットからダウンロードした写真を表示するための gridView 用のアダプターを作成しました。コードの一部は次のとおりです。

public class ImageAdapter extends BaseAdapter {
    int mGalleryItemBackground;
    private Context mContext;

    public ArrayList<Drawable> drawablesFromUrl = new ArrayList<Drawable>();

    public ImageAdapter(Context c) {
        mContext = c;
    }

    public void addItem(Drawable item) {
        drawablesFromUrl.add(item);
    }

    public int getCount() {
        return drawablesFromUrl.size();
    }

    public Drawable getItem(int position) {
        return drawablesFromUrl.get(position);
    }

    public long getItemId(int position) {
        return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {  // if it's not recycled, initialize some attributes
            imageView = new ImageView(mContext);
            imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
            imageView.setPadding(8, 8, 8, 8);
        } else {
            imageView = (ImageView) convertView;
        }

        imageView.setImageDrawable(drawablesFromUrl.get(position));
        return imageView;

    }//View getView

}//class ImageAdapter

正常に動作し、ダウンロードした写真は ArrayList "drawablesFromUrl.get(position)" に保存されました

これで、別のアクティビティを開いて imagView に個々の写真を表示するインテントを作成しました。コードの一部は次のようにリストされています。

SitePhotoGallery pg = new SitePhotoGallery();
ImageAdapter imageAdapter = pg.new ImageAdapter(this);

Drawable dPhoto=imageAdapter.drawablesFromUrl.get(position); //(ERROR in this line)
BitmapDrawable bPhoto  = (BitmapDrawable) dPhoto;
Bitmap snoop = bPhoto.getBitmap();

//Bitmap snoop = BitmapFactory.decodeResource(getResources(),imageAdapter.mThumbIds[position]);
img.setImageBitmap(snoop);  
img.setMaxZoom(4f);        
setContentView(img);     

エラーが表示されます:

07-11 15:22:11.458: E/AndroidRuntime(12856): java.lang.RuntimeException: アクティビティ
ComponentInfo を開始できません {com.android.mcsis/com.android.mcsis.SitePhotoFullScreen}: java.lang.IndexOutOfBoundsException: 無効ですインデックス 0、サイズは 0

imageAdapter.drawablesFromUrl.get(position);配列リストが空だと思います。私が間違っていることはありますか?

4

1 に答える 1

0

ImageAdapter imageAdapter = pg.new ImageAdapter(this);

ImageAdapter 内部クラスの新しいインスタンスを作成していると思います。そのため、以前に保存された arraylist ビットマップ データは、別のオブジェクトに属していたため失われます。

アプリケーション全体でデータを維持したい場合は、代わりに Application クラス オブジェクトを使用してみてください。そのかなりシンプルでいいです。また、context.getApplicationContext() によってそのインスタンスを取得できます。

于 2012-07-11T07:53:34.280 に答える