Intento desarrollar una aplicación para Android que permita al usuario obtener datos de flickr y mostrarlos en un GridView
(con una buena animación 3D). Después de algunas aventuras lo tengo casi corriendo, pero ahora estoy atascado.Llenando un GridView con ImageView dinámicamente/programáticamente usando un ImageAdapter
aquí está el problema:
Tengo un hilo de interfaz de usuario "LoadPhotosTask" que obtiene las imágenes de Flickr, al igual que la aplicación de código abierto photostream. En el método onProgressUpdate(LoadedPhoto... value)
de esa subclase, llamo al addPhoto()
. Hasta ahora todo bien, obtuve algunos buenos datos de Bitmap y Flickr.photo con toda la información que necesito.
@Override
public void onProgressUpdate(LoadedPhoto... value) {
addPhoto(value);
}
Por otro lado, tengo un GridView
. Ahora quiero llenarlo con las fotos. Tiene un adaptador llamado ImageAdapter
(que se extiende BaseAdapter
, consulte este tutorial). Si utilizo una matriz dentro de la clase ImageAdapter
puedo llenar el GridView
con algunas imágenes de muestra. Pero si quiero poblarlo en tiempo de ejecución, no sé qué hacer.
¿Cómo debo configurar el método getView en el ImageAdapter
? Intenté llenar el conjunto dentro de la clase ImageAdapter
con mis valores en addPhoto
, pero no muestra nada.
Así que en primer lugar me fue la creación de la matriz con la cantidad de fotos que quería mostrar en la cuadrícula como que (código se encuentra dentro de la clase ImageAdapter
):
// class variable
private ImageView[] mThumbIds;
[...]
public void setupArray(int count) {
this.mThumbIds = new ImageView[count];
}
Entonces llama a este método con la longitud de mi photolist:
final Flickr.PhotoList list = params[0];
final int count = list.getCount();
int helper = 0;
imagead.setupArray(count);
Después me llama al método getView manualmente dentro del método addPhoto:
private void addPhoto(LoadedPhoto... value) {
ImageView image = (ImageView) mInflater.inflate(
R.layout.grid_item_photo, null);
image.setImageBitmap(value[0].mBitmap);
image.setTag(value[0].mPhoto);
imagead.setmThumbIds(image, value[0].mPosition);
imagead.getView(value[0].mPosition, null, mpicturesGrid);
}
Ese es el método getView dentro ImageAdapter:
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) { // if it's not recycled, initialize some
// attributes
imageView = new ImageView(mContext);
imageView.setLayoutParams(new GridView.LayoutParams(EDGE_LENGTH,
EDGE_LENGTH));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(0, 0, 0, 0);
imageView.setVisibility(View.VISIBLE);
} else {
imageView = (ImageView) convertView;
}
imageView.setImageDrawable(mThumbIds[position].getDrawable());
imageView.setTag(mThumbIds[position].getTag());
return imageView;
}
Muchas gracias por su respuesta. Creo que ese es el punto. Ok, veamos ... Si entiendo correctamente, MyAdapter será mi ImageAdapter, ¿no? Pero entonces, ¿mPhotos será el contexto? Me disculpo, leí varios adaptadores tuts, pero todavía no lo entiendo. ¿Cómo debo configurar el ImageAdapter/MyAdapter correctamente? –
Sí, MyAdapter == ImageAdapter.No, mPhotos es solo una lista que contendrá las fotos. Para su caso, sería mejor si extiende ImageAdapter con ArrayAdapter en el constructor puede pasarle una lista de elementos. –
Macarse
Gracias por esto. Estoy haciendo lo mismo con Gallery. Pensé que el método se encontraría en el adaptador ya que no hay nada en la galería. SO nunca me falla. :) – frostymarvelous