Search code examples
androidandroid-viewpager

Dynamic Images ( from API) not shown in my View pager android?


myoutputpage I have an one doubt in viewpager,Here i used Viewpager with i called the images dynamically from API web services,I can't view the images in Activity.Here is my customadapter for view pager.I have an API String image like this: "http://"xxx"/xxx/images/apple.png" ,Sorry for my poor english,I am beginner of android learner.

public class CustomPagerAdapter extends PagerAdapter {

Context mContext;
LayoutInflater mLayoutInflater;
String[] mResources = {"", ""};
List<String> list;


public CustomPagerAdapter(Context context, List<String> images) {
    mContext = context;
    mLayoutInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    list = images;
    Log.i("listlist", "" + list);
}

@Override
public int getCount() {
    return list.size();
}

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

@Override
public Object instantiateItem(ViewGroup container, int position) {
    View itemView = mLayoutInflater.inflate(R.layout.pager_item, container, false);

    ImageView imageView = (ImageView) itemView.findViewById(R.id.imageView);
    for (int i = 0; i < list.size(); i++) {
      //  imageView.setImageResource(Integer.parseInt(list.get(i)));
        try {
            i = Integer.parseInt(list.get(i));
            imageView.setImageResource(i);
        } catch (NumberFormatException nfe) {
            // Handle the condition when str is not a number.
            Log.i("nummmberfromae", "" + nfe);
        }
    }


    container.addView(itemView);

    return itemView;
}

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

Solution

  • What is this? Can you please explain?

    for (int i = 0; i < list.size(); i++) {
          //  imageView.setImageResource(Integer.parseInt(list.get(i)));
            try {
                i = Integer.parseInt(list.get(i));
                imageView.setImageResource(i);
            } catch (NumberFormatException nfe) {
                // Handle the condition when str is not a number.
                Log.i("nummmberfromae", "" + nfe);
            }
        }
    

    Why you need for loop in your instantiate method? This method itself called for each item of your list. Using for loop you are setting last position means last image of your list into every image of your ViewPager.

    It should be something like this:

    @Override
            public Object instantiateItem(ViewGroup container, int position) {
                View itemView = mLayoutInflater.inflate(R.layout.pager_item, container, false);
    
                ImageView imageView = (ImageView) itemView.findViewById(R.id.imageView);
                    try {
                        String imageURL = list.get(position);
                        Picasso.with(mContext).load(imageURL).into(imageView);
                    } catch (NumberFormatException nfe) {
                        // Handle the condition when str is not a number.
                        Log.i("nummmberfromae", "" + nfe);
                    }
    
    
                container.addView(itemView);
    
                return itemView;
            }
    

    Add dependency in your build.gradle file (module level)

    dependencies {
    compile 'com.squareup.picasso:picasso:2.5.2'
    }
    

    You can use any third party library to load image from URL. You can either use Volley, Glide or Picasso.