glide ejemplo developer android android-glide

android - ejemplo - Error "No debe llamar a setTag() en una vista Glide está apuntando" cuando se usa Glide



glide vs picasso (5)

La clave es ViewTarget.setTagId ; configurándolo liberará el setTag predeterminado en ImageView para que pueda usarlo como raíz en el diseño del elemento. Se introdujo en Glide 3.6.0 en el número 370 .

En tu manifiesto agrega esto:

<application android:name=".App"

Luego crea una clase de contexto de aplicación:

public class App extends Application { @Override public void onCreate() { super.onCreate(); ViewTarget.setTagId(R.id.glide_tag); } }

Agregue lo siguiente como contenido para src/main/values/ids.xml :

<resources> <item type="id" name="glide_tag" /> </resources>

(o simplemente agregue el <item ... /> en cualquier xml de resources en values )

Utilizo la vista del adaptador personalizado interno de la biblioteca Glide en mis aplicaciones. Pero tengo error:

"You must not call setTag() on a view Glide is targeting"

Esta parte de mi código:

@Override public View getView(int position, View view, ViewGroup container) { ViewHolder holder; if (view == null) { holder = new ViewHolder(); view = holder.imageView = new ImageView(context); view.setTag(holder); } else { holder = (ViewHolder) view.getTag(); } holder.imageView.setAdjustViewBounds(true); LinearLayout.LayoutParams vp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT); holder.imageView .setLayoutParams(vp); holder.imageView .setScaleType(ImageView.ScaleType.CENTER_CROP); String var_news_article_images = imageIdList.get(getPosition(position)); Glide.with(context) .load(var_news_article_images) .placeholder(R.drawable.placeholder) .into(holder.imageView); return view; }

Entonces, ¿cómo solucionarlo?


Por lo que he encontrado en Google, parece que Glide y ViewHolder no se llevan muy bien. Intenté Picasso en su lugar. Problema resuelto al instante.

También puede probar la solución de TWiStErRob, pero asegúrese de usar Glide 3.6.0 o superior. No reconoció setTagId (int) en 3.5.2


Tuve el mismo problema, después de quitar el siguiente

android:tag="xx"

de la imagen en mi diseño xml, ese problema desapareció


Glide utiliza setTag(Object) método setTag(Object) . Así que elimine todas las llamadas de setTag(Object) de su vista de destino. es decir, ImageView

Si realmente requirió usar el método setTag en su vista, puede usar el setTag(int,Object) lugar.


ImageView mImageAds = (ImageView) findViewById(R.id.iv_img); mImageAds.setTag(R.id.iv_img, i); // "i" means some integer value Glide.with(getActivity()).load(urlPath) .placeholder(R.drawable.ads_banner) .diskCacheStrategy(DiskCacheStrategy.ALL) .into(mImageAds); mImageAds.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { if(mImageAds.getTag() != null) { int position = (Integer) view.getTag(R.id.iv_img); //code here what would you like to do. } } });

Ver también: https://androidhiker.blogspot.com/2015/10/how-to-resolve-glide-settag-issue.html