图像未在使用api数据Android的RecyclerView中显示

时间:2016-10-21 07:49:45

标签: android imageview android-recyclerview

这是我的代码,其中图像显示不正确:

public class MoviesAdapter extends RecyclerView.Adapter<MoviesAdapter.PhotoViewHolder> implements SizeCalculatorDelegate {


    ArrayList<String> source_title = new ArrayList<String>();


    private final double[] mImageAspectRatios;


    private Context mContext;


    public double aspectRatioForIndex(int index) {
        // Precaution, have better handling for this in greedo-layout
        if (index >= getItemCount()) return 1.0;


        return mImageAspectRatios[getLoopedIndex(index)];
    }

    public class PhotoViewHolder extends RecyclerView.ViewHolder {
        private ImageView mImageView;

        public PhotoViewHolder(ImageView imageView) {
            super(imageView);
            mImageView = imageView;

        }
    }

    public MoviesAdapter(Context context, ArrayList<String> image) {
        mContext = context;
        this.source_title = image;

        mImageAspectRatios = new double[source_title.size()];
//        calculateImageAspectRatios();
    }

    @Override
    public PhotoViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        ImageView imageView = new ImageView(mContext);
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);

        imageView.setLayoutParams(new ViewGroup.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.MATCH_PARENT
        ));
        return new PhotoViewHolder(imageView);
    }

    @Override
    public void onBindViewHolder(final PhotoViewHolder holder, int position) {


 Picasso.with(mContext).load(source_title.get(position)).into(new Target() {
            @Override
            public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
                int width = bitmap.getWidth();
                int height = bitmap.getHeight();
                holder.mImageView.setImageBitmap(bitmap);
            }

            @Override
            public void onBitmapFailed(Drawable errorDrawable) {

                Log.d("bitmapfailed", "errorDrawable " + errorDrawable);

            }

            @Override
            public void onPrepareLoad(Drawable placeHolderDrawable) {

                Log.d("onPrepareLoad", "placeHolderDrawable " + placeHolderDrawable);
            }
        });



    }

    @Override
    public int getItemCount() {
        return source_title.size();
    }

//    private void calculateImageAspectRatios() {
//        BitmapFactory.Options options = new BitmapFactory.Options();
//        options.inJustDecodeBounds = true;
//
//        for (int i = 0; i < source_title.size(); i++) {
//
//            int value = Integer.parseInt(source_title.get(i));
//
//            BitmapFactory.decodeResource(mContext.getResources(), value, options);
//            mImageAspectRatios[i] = options.outWidth / (double) options.outHeight;
//        }
//    }

    // Index gets wrapped around <code>Constants.IMAGES.length</code> so we can loop content.
    private int getLoopedIndex(int index) {
        return index % source_title.size(); // wrap around
    }
}

这是原始的演示代码

public class PhotosAdapter extends RecyclerView.Adapter<PhotosAdapter.PhotoViewHolder> implements SizeCalculatorDelegate {
    private static final int IMAGE_COUNT = 500; // number of images adapter will show

    private final int[] mImageResIds = Constants.IMAGES;
    private final double[] mImageAspectRatios = new double[mImageResIds.length];


    private Context mContext;

    @Override
    public double aspectRatioForIndex(int index) {
        // Precaution, have better handling for this in greedo-layout
        if (index >= getItemCount()) return 1.0;

        Log.d("index", mImageAspectRatios + "");

        return mImageAspectRatios[getLoopedIndex(index)];
    }

    public class PhotoViewHolder extends RecyclerView.ViewHolder {
        private ImageView mImageView;

        public PhotoViewHolder(ImageView imageView) {
            super(imageView);
            mImageView = imageView;

        }
    }

    public PhotosAdapter(Context context) {
        mContext = context;
        calculateImageAspectRatios();
    }

    @Override
    public PhotoViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        ImageView imageView = new ImageView(mContext);
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);

        imageView.setLayoutParams(new ViewGroup.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.MATCH_PARENT
        ));
        return new PhotoViewHolder(imageView);
    }

    @Override
    public void onBindViewHolder(PhotoViewHolder holder, int position) {
        Picasso.with(mContext)
                .load(mImageResIds[getLoopedIndex(position)])
                .into(holder.mImageView);
    }

    @Override
    public int getItemCount() {
        return IMAGE_COUNT;
    }

    private void calculateImageAspectRatios() {
        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;

        for (int i = 0; i < mImageResIds.length; i++) {
            BitmapFactory.decodeResource(mContext.getResources(), mImageResIds[i], options);
            mImageAspectRatios[i] = options.outWidth / (double) options.outHeight;
        }
    }

    // Index gets wrapped around <code>Constants.IMAGES.length</code> so we can loop content.
    private int getLoopedIndex(int index) {
        return index % Constants.IMAGES.length; // wrap around
    }
}

在这个演示中,图像显示正常但在我的演示图像中没有显示,来自source_title arraylist的数据显示正常,但是这个演示无法正常工作,因为我使用onBindViewHolder方法,它进入onPrepareLoad异常,称为placeHolderDrawable的null值。 ..

是否有任何解决方案可以使用它或其他方法或方法来解决此问题? 对不起我的英语和thnx提前...

0 个答案:

没有答案