【问题标题】:Android ImageAdapter using Volley from JSONAndroid ImageAdapter 使用来自 JSON 的 Volley
【发布时间】:2016-08-15 06:12:23
【问题描述】:

我正在尝试为 Android 创建一个图库应用,并且正在使用 Volley 和 Glide。

我有一个 ImageAdapter 类,看起来像这样

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;

import android.widget.ImageView;

import com.bumptech.glide.Glide;

public class ImageAdapter extends BaseAdapter {
private Context CTX;
private Integer image_id[] = {R.mipmap.sample_0,
        R.mipmap.sample_1, R.mipmap.sample_2,
        R.mipmap.sample_3,
        R.mipmap.sample_4,
        R.mipmap.sample_5,
        R.mipmap.sample_6,
        R.mipmap.sample_7
};

public ImageAdapter(Context CTX) {
    this.CTX = CTX;
}

@Override
public int getCount() {

    return image_id.length;
}

@Override
public Object getItem(int arg0) {
    return null;
}

@Override
public long getItemId(int arg0) {
    return 0;
}

@Override
public View getView(int arg0, View arg1, ViewGroup arg2) {
    ImageView img;

    if (arg1 == null) {
        img = new ImageView(CTX);
        img.setLayoutParams(new GridView.LayoutParams(200, 200));
        img.setScaleType(ImageView.ScaleType.CENTER_CROP);
        img.setPadding(8, 8, 8, 8);

    } else {
        img = (ImageView) arg1;
    }

    Glide.with(CTX)
            .load(image_id[arg0])
            .placeholder(R.mipmap.warning)
            .centerCrop()
            .crossFade()
            .into(img);


    return img;

  }
}

现在我从 image_id 数组传递给适配器图像,但在 MainActivity 中我发出一个凌空请求,从我的服务器获取一些图像(url),我将它们存储在一个字符串数组中。

如何将字符串 URL 数组传递给 ImageAdapter 类?

【问题讨论】:

    标签: android image android-volley gallery android-glide


    【解决方案1】:

    ArrayList 的图像传递给构造函数中的适配器,如

    private Context cxt;
    private ArrayList<String> images;
    public ImageAdapter(Context cxt,ArrayList<String> images){
      this.cxt = cxt;
      this.images = images;
    }
    
    @override 
    public void getCount(){
        return images == null ? 0 : images.size();
    }
    

    最初您可以传递一个空的arraylist,然后在从 volley 加载数据后更新arraylist 并调用adapter.notifyDataSetChanged()

    在您的 getview 中,您可以使用位置从数组列表中访问图像

    【讨论】:

      【解决方案2】:

      只需在 Adapter 中进行一些修改:

      import android.content.Context;
      import android.view.View;
      import android.view.ViewGroup;
      import android.widget.BaseAdapter;
      import android.widget.GridView;
      
      import android.widget.ImageView;
      
      import com.bumptech.glide.Glide;
      
      public class ImageAdapter extends BaseAdapter {
          private Context CTX;
          private int image_id[] = {R.mipmap.sample_0,
                  R.mipmap.sample_1, R.mipmap.sample_2,
                  R.mipmap.sample_3,
                  R.mipmap.sample_4,
                  R.mipmap.sample_5,
                  R.mipmap.sample_6,
                  R.mipmap.sample_7
          };
      
          private String image_urls[];
      
          public ImageAdapter(Context CTX) {
              this.CTX = CTX;
          }
      
          @Override
          public int getCount() {
              if (image_urls != null && image_urls.length > 0) return image_urls.length;
              return image_id.length;
          }
      
          public void updateData(String[] urls) {
              this.image_urls = urls;
              this.notifyDataSetChanged();
          }
      
          @Override
          public Object getItem(int arg0) {
              return null;
          }
      
          @Override
          public long getItemId(int arg0) {
              return 0;
          }
      
          @Override
          public View getView(int arg0, View arg1, ViewGroup arg2) {
              ImageView img;
      
              if (arg1 == null) {
                  img = new ImageView(CTX);
                  img.setLayoutParams(new GridView.LayoutParams(200, 200));
                  img.setScaleType(ImageView.ScaleType.CENTER_CROP);
                  img.setPadding(8, 8, 8, 8);
      
              } else {
                  img = (ImageView) arg1;
              }
      
              if (image_urls != null && image_urls.length > arg0) {
                  Glide.with(CTX)
                          .load(image_urls[arg0])
                          .placeholder(R.mipmap.warning)
                          .centerCrop()
                          .crossFade()
                          .into(img);
              } else {
                  Glide.with(CTX)
                          .load(image_id[arg0])
                          .placeholder(R.mipmap.warning)
                          .centerCrop()
                          .crossFade()
                          .into(img);
              }
      
              return img;
            }
          }
      }
      

      当Volley返回成功时:

      yourAdapter.updateData(yourStringUrlArray);
      

      【讨论】:

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