2016-08-15 7 views
0

Я пытаюсь создать приложение для галереи для Android, и я использую Volley и Glide.Android ImageAdapter с помощью Volley от JSON

У меня есть класс 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 я делаю запрос залпа, который получает мне некоторые изображения (urls) с моего сервера, который я храню в массиве String.

Как передать этот массив строк для класса ImageAdapter?

ответ

0

Просто сделать некоторые изменения в адаптер:

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); 
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 и после загрузки данные залпа обновил arraylist и вызвать adapter.notifyDataSetChanged()

и в вашем GetView вы можете получить доступ изображения из ArrayList с помощью позиции