0

いくつかの画像を表示する GridView と、TouchImageView と統合された ViewPager があります。1 つのシナリオを除いて、正常に動作しているようです。

GridView のサムネイル画像をクリックして ViewPager を開始すると、response.getBitMap が NULL として表示されます。しかし、右にスワイプし続けると、画像が正常に読み込まれます。スワイプして戻ると、最初の画像も表示されます。GridView のサムネイル画像が GridViewActivity から最初にクリックされるたびに発生します。

ログ ファイルを確認すると、ImageLoader が一度に 2 つの画像 (現在の画像と次の画像) を要求していることがわかりますが、最初の読み込みでは同じことを 2 回行っています (合計 4 つの要求、以下の logcat を確認してください)。

FullScreenImageAdapter.java コード:

import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.RelativeLayout;

import com.android.volley.VolleyError;
import com.android.volley.toolbox.ImageLoader;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;

public class FullScreenImageAdapter extends PagerAdapter {
//Log tag
private static final String TAG = FullImageActivity.class.getSimpleName();
private Activity _activity;
private String[] _imagePaths, _imageCaptions;
private LayoutInflater inflater;
private View mCurrentView;
TouchImageView imgDisplay;

// constructor
public FullScreenImageAdapter(Activity activity, String[] imagePaths, String[] imageCaptions) {
    this._activity = activity;
    this._imagePaths = imagePaths;
    this._imageCaptions = imageCaptions;
}

@Override
public int getCount() {
    return this._imagePaths.length;
}

@Override
public boolean isViewFromObject(View view, Object object) {
    return view == ((RelativeLayout) object);
}

public String getImageCaption(int position) {
    return _imageCaptions[position];
}

@Override
public void setPrimaryItem(ViewGroup container, int position, Object object) {
    mCurrentView = (View)object;
}

public View getCurrentView() {
    return mCurrentView;
}

@Override
public Object instantiateItem(ViewGroup container, int position) {

    inflater = (LayoutInflater) _activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View viewLayout = inflater.inflate(R.layout.layout_fullscreen_image, container, false);

    imgDisplay = (TouchImageView) viewLayout.findViewById(R.id.imgDisplay);

    // We download image into ImageView
    ImageLoader imageLoader = AppController.getInstance().getImageLoader();
    String strFullImageURL = _imagePaths[position];

    imageLoader.get(strFullImageURL, new ImageLoader.ImageListener() {
        @Override
        public void onResponse(ImageLoader.ImageContainer response, boolean isImmediate) {

            Log.d(TAG, "Outside IF response.getBitmap() = "+response.getBitmap()+"");
            if (response.getBitmap() != null) {
                Log.d(TAG, "Inside IF response.getBitmap() = "+response.getBitmap()+"");
                // load bitmap into imageview
                imgDisplay.setImageBitmap(response.getBitmap());
            }
        }

        @Override
        public void onErrorResponse(VolleyError error) {
            // unable to fetch full image
            Log.d(TAG, "VolleyError while downloading full image: "+error.getMessage());
        }
    });

    ((ViewPager) container).addView(viewLayout);

    return viewLayout;
}

@Override
public void destroyItem(ViewGroup container, int position, Object object) {
    ((ViewPager) container).removeView((RelativeLayout) object);
}
}

ログキャット

10-05 18:16:31.286  24976-24976/com.xyz D/GridViewActivity﹕ Array length: 32
10-05 18:16:31.626  24976-24976/com.xyz D/FullImageActivity﹕ Outside IF response.getBitmap() = null
10-05 18:16:32.277  24976-24976/com.xyz D/FullImageActivity﹕ Outside IF response.getBitmap() = android.graphics.Bitmap@42a4f4a0
10-05 18:16:32.277  24976-24976/com.xyz D/FullImageActivity﹕ Inside IF response.getBitmap() = android.graphics.Bitmap@42a4f4a0
10-05 18:16:32.477  24976-24976/com.xyz D/FullImageActivity﹕ Outside IF response.getBitmap() = android.graphics.Bitmap@42a737d0
10-05 18:16:32.477  24976-24976/com.xyz D/FullImageActivity﹕ Inside IF response.getBitmap() = android.graphics.Bitmap@42a737d0

なぜこれが起こっているのか分かりません。それを修正するために何かできることはありますか?

4

1 に答える 1

0

以下の方法で画像をロードすることで問題を修正しました。

//Loading image with placeholder and error image
imageLoader.get(Const.URL_IMAGE, ImageLoader.getImageListener(
            imageView, R.drawable.ico_loading, R.drawable.ico_error));
于 2014-10-07T13:16:09.883 に答える