Picasso y adaptador con viewHolder

Tengo problemas con trabajar con Picasso. No puedo acceder a viewHolder de la clase Target. Y hay un problema con guardar las imágenes descargadas. ¿Puede alguien ayudarme ???? Por favor.

aquí hay un código de adaptador:

public AsanasAdapter(List<Asana> asanaList, Context mContext){ this.mContext = mContext; this.asanaList = asanaList; this.layoutInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } @Override public int getCount() { return asanaList.size(); } @Override public Asana getItem(int position) { return asanaList.get(position); } @Override public long getItemId(int position) { return 0; } @Override public View getView(final int position, View convertView, ViewGroup parent) { ViewHolder viewHolder =null; if(convertView==null){ viewHolder = new ViewHolder(); convertView = layoutInflater.inflate(R.layout.asanas_item, null); viewHolder.asanaName = (TextView) convertView.findViewById(R.id.asana_name); viewHolder.asanaDesc = (TextView) convertView.findViewById(R.id.asana_desc); viewHolder.asanaImg = (ImageView) convertView.findViewById(R.id.asana_img); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } String name = getItem(position).getName(); String desc = getItem(position).getDescShort(); viewHolder.asanaDesc.setText(desc); viewHolder.asanaName.setText(name); final File imgFile = new File(Environment.getDataDirectory()+"/"+getItem(position).getId()+".png"); if(imgFile.exists()){ Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath()); viewHolder.asanaImg.setImageBitmap(myBitmap); } else if (isNetworkConnected()) { Log.d("MYLOGGGGGGGG", MYurl.BASE_URL + "/" + getItem(position).getImgThumb() + ""); final ViewHolder finalViewHolder = viewHolder; Picasso.with(mContext) .load(MYurl.BASE_URL + "/" + getItem(position).getImgThumb()) .into(new Target() { @Override public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { viewHolder File fPath = Environment.getDataDirectory(); File file = new File(fPath, getItem(position)+".png"); if (!file.exists()) { try { file.mkdirs(); file.createNewFile(); } catch (IOException e) { e.printStackTrace(); } } FileOutputStream out = null; try{ out = new FileOutputStream(file); bitmap.compress(Bitmap.CompressFormat.PNG,100,out); } catch (Exception e){ e.printStackTrace(); } finally { try{ if (out != null){ out.close(); } } catch (IOException e){ e.printStackTrace(); } } } @Override public void onBitmapFailed(Drawable errorDrawable) { } @Override public void onPrepareLoad(Drawable placeHolderDrawable) { } }); } else{ // viewHolder.asanaImg.setImageBitmap(); } return convertView; } public boolean isNetworkConnected() { ConnectivityManager cm = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo ni = cm.getActiveNetworkInfo(); if (ni == null) { // There are no active networks. return false; } else return true; } static class ViewHolder { ImageView asanaImg; TextView asanaName; TextView asanaDesc; } } 

Aquí crear una nueva clase de implementación Meta como:

 public class MyTarget implements Target { ViewHolder holder; public MyTarget(ViewHolder holder){ this.holder = holder; } @Override public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { } @Override public void onBitmapFailed(Drawable errorDrawable) { } @Override public void onPrepareLoad(Drawable placeHolderDrawable) { } 

}

y utilizarlo en su código como:

  MyTarget target = new MyTarget(viewHolder) { @Override public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { //Use ViewHolder here File fPath = Environment.getDataDirectory(); File file = new File(fPath, getItem(position)+".png"); if (!file.exists()) { try { file.mkdirs(); file.createNewFile(); } catch (IOException e) { e.printStackTrace(); } } FileOutputStream out = null; try{ out = new FileOutputStream(file); bitmap.compress(Bitmap.CompressFormat.PNG,100,out); } catch (Exception e){ e.printStackTrace(); } finally { try{ if (out != null){ out.close(); } } catch (IOException e){ e.printStackTrace(); } } } }; Picasso.with(mContext) .load(MYurl.BASE_URL + "/" + getItem(position).getImgThumb()) .into(target); 

No se puede usar ViewHolder en la clase Target porque es una clase interna. Para tener acceso a ViewHolder, U puede tener que hacer que la variable ViewHolder sea una variable final. Espero que pueda ayudarte.

  • Picasso carga imagen con triángulo en la esquina de la imagen
  • ¿Cómo implementar correctamente un listview personalizado con imágenes usando la biblioteca de Picasso?
  • Picasso - obtener el camino de la imagen cargada
  • Imagen de carga de Picasso en GifImageView (biblioteca android-gif-drawable)
  • Mostrar una imagen "Cargando ..." mientras carga el fondo de la imagen con Picasso
  • HorizontalGridView / RecyclerLa posición de desplazamiento se restablece una vez que la imagen de Picasso se carga
  • ¿Cómo implementar Pinch Zoom en la biblioteca de Picasso?
  • Almacenamiento en caché de disco Picasso
  • No se puede cargar la imagen desde el disco con picasso
  • Progreso de la demostración al descargar la imagen del servidor a la vista de la imagen
  • Picasso problema de extracción de imágenes cuando se utiliza con RecyclerView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.