Search code examples
androidandroid-viewpageruniversal-image-loader

Using ProgressBar with viewpager and Android UIL doesn't set its visibility GONE


I'm using Android Universal Image Loader to get images using url and add them to the viewpager. I added a progressbar in my viewpager's item layout so each image has a progressbar and will set its visibility to GONE when the image loads completely. However, it seems that the progressbar only shows on the 1st image of the viewpager and it doesn't disappear even if the images are loaded.

Here is my adapter for the viewpager:

@Override
public Object instantiateItem(ViewGroup container, int position) {
    ImageLoader imageLoader = ImageLoader.getInstance();
    inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View itemView = inflater.inflate(R.layout.viewpager_item, container,
            false);

    ImageView img = (ImageView) itemView.findViewById(R.id.img);
    ProgressBar progressBar = (ProgressBar) itemView.findViewById(R.id.progressBar);

    imageLoader.displayImage(links[position], img, options, new SimpleImageLoadingListener() {
        @Override
        public void onLoadingStarted(String s, View view) {progressBar.setVisibility(View.VISIBLE); }
        @Override
        public void onLoadingFailed(String s, View view, FailReason failReason) { progressBar.setVisibility(View.GONE); }
        @Override
        public void onLoadingComplete(String s, View view, Bitmap bitmap) { progressBar.setVisibility(View.GONE); }
    });

    ((ViewPager) container).addView(itemView);

    return itemView;
}

Solution

  • I am not sure if there are any changes in the new UIL or it has been updated. But the below works. Makes sure you set the visiiblity of the spinner in the appropriate methods

    Use the below

    public void display(ImageView img, String url, final ProgressBar spinner)
    {
        imageLoader.displayImage(url, img, options, new ImageLoadingListener() {
            @Override
            public void onLoadingStarted(String imageUri, View view) {
             spinner.setVisibility(View.VISIBLE); // set the spinner visible
            }
            @Override
            public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
             spinner.setVisibility(View.GONE); // set the spinenr visibility to gone
    
    
            }
            @Override
            public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
             spinner.setVisibility(View.GONE); //  loading completed set the spinenr visibility to gone
            }
            @Override
            public void onLoadingCancelled(String imageUri, View view) {
    
            }
    
    });
    }
    

    Then call

    display(img, links[position], progressBar);