【问题标题】:Dynamically add Images into viewpager containing ImageView(Individual Pages)将图像动态添加到包含 ImageView(Individual Pages) 的 viewpager
【发布时间】:2017-06-23 02:04:29
【问题描述】:

我想使用 Glide Image Library 将图像动态添加到 ViewPager。我有一个 CustomPagerAdapter 类:-

public class CustomPagerAdapter extends PagerAdapter {

    private Context mContext;
    private LayoutInflater mLayoutInflater;
    private List<DressDetailResult> mResources;

    public CustomPagerAdapter(Context context, List<DressDetailResult> images) {
        this.mContext = context;
        this.mLayoutInflater = (LayoutInflater) mContext
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        this.mResources = images;
    }

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

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

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

        ImageView imageView = (ImageView) itemView.findViewById(R.id.item_dress_detail_vertical_vp_iv_dress);

        DressDetailResult dressDetailResult = mResources.get(position);

     Log.e("image url detail", " " + dressDetailResult.getImages());

        Glide.with(mContext).load(dressDetailResult.getImages())
                .diskCacheStrategy(DiskCacheStrategy.ALL)
                .into(imageView);

        container.addView(itemView);

        return itemView;
    }

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

这是我使用 RetroFit 2.0 的模型类:-

package com.webmavens.sherrihill.models.DressDetail;

import java.util.List;

import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

public class DressDetailResult {


    @SerializedName("images")
    @Expose
    private List<String> images = null;


    public List<String> getImages() {
        return images;
    }

    public void setImages(List<String> images) {
        this.images = images;
    }

}

在列表中获取图片网址,但不知道如何将其加载到 Glide 中,即使我尝试使用下面的代码加载,但它只加载一张图片,并没有为下一张图片添加另一个页面:

List<String> stringList = dressDetailResult.getImages();

 Glide.with(mContext).load(stringList.get(position))
                .diskCacheStrategy(DiskCacheStrategy.ALL)
                .into(imageView);

ImageUrls Array的Logcat是:-

    [http://chandrajeet.com/wp-content/uploads/2015/02/3148608-lg.jpg, 
http://www.gettyimages.in/gi-resources/images/Embed/new/embed2.jpg, 
http://www.thinkstockphotos.in/ts-resources/images/home/TS_AnonHP_462882495_01.jpg,
    http://hdwallpapershdpics.com/wp-content/uploads/2016/02/4237684-images.jpg]

我认为它会将所有数组加载到 glide 中,我该如何个性化它?

【问题讨论】:

  • 在适配器中传递图像列表。 mResources 应该是图像 url 的数组或列表。那样就可以正常工作了。
  • 不明白你的意思,我在哪里补充?在哪一行?
  • 分享api端点

标签: android dynamic android-viewpager imageview


【解决方案1】:

因为您使用instantiateItemviewpager 创建项目。您需要在此方法中为所有视图声明 final 以保留页面实例。应该是这样的:

final View itemView = mLayoutInflater.inflate(R.layout.item_dress_detail_vertical_vp, container, false);

final ImageView imageView = (ImageView) itemView.findViewById(R.id.item_dress_detail_vertical_vp_iv_dress);
...

【讨论】:

    【解决方案2】:

    确保您已正确设置滑翔库。

    所有必要的步骤都可以在这个link中找到。

    如果你已经勾选了所有用于集成 glide 库的框,那么:

    <uses-permission android:name="android.permission.INTERNET" />
    

    在清单文件中添加这行代码以访问 Internet。

    另外:为避免多个请求队列考虑将上下文传递给应用程序类(单例设计实践)。但只是为了让您知道您当前的上下文也应该完成所需的工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多