2016-08-15 2 views
0

Ich versuche, eine Galerie-App für Android zu erstellen, und ich verwende Volley und Glide.Android ImageAdapter mit Volley von JSON

Ich habe eine ImageAdapter-Klasse, die Gerade jetzt wie dieses Ich Übergang von der image_id Array an den Adapter Bilder

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; 

    } 
} 

aussieht, aber in der MainActivity ich eine Salve Anfrage mache, die mir ein paar Bilder bekommt (URLs) von meinem Server, die ich in einem String-Array speichern.

Wie kann ich dieses Array von String-URLs an die ImageAdapter-Klasse übergeben?

Antwort

0

Nur einige Änderungen in Adapter machen:

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; 
     } 
    } 
} 

Und wenn Volley kehrt erfolgreich:

yourAdapter.updateData(yourStringUrlArray); 
1

Pass ArrayList der Bilder an den Adapter im Konstruktor wie

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(); 
} 

zunächst Sie können eine leere arraylist übergeben und nach dem Laden Daten von Volley die arraylist aktualisiert und adapter.notifyDataSetChanged()

und in Ihrem GetView nennen können Sie das Bild aus der Arraylist mit Position

zugreifen