Wickeln Sie Ihre ImageView in eine ViewGroup (z. B. LinearLayout) ein.
– Simon Marquis
19. Januar 2016 um 11:49 Uhr
@AmayDiam Ich habe die Lösung gepostet! schönen Tag noch!
– Jorgesys
10. Februar 2016 um 3:59 Uhr
TWiStErRob
Der Schlüssel ist ViewTarget.setTagId; Wenn Sie es einstellen, wird die Standardeinstellung freigegeben setTag auf der ImageView Sie können es also als Root im Elementlayout verwenden. Es wurde in Glide 3.6.0 eingeführt Ausgabe Nr. 370.
Fügen Sie in Ihrem Manifest Folgendes hinzu:
<application
android:name=".App"
Erstellen Sie dann eine Anwendungskontextklasse:
public class App extends Application {
@Override public void onCreate() {
super.onCreate();
ViewTarget.setTagId(R.id.glide_tag);
}
}
Fügen Sie Folgendes als Inhalt für hinzu src/main/values/ids.xml:
(Oder füge einfach das obige hinzu <item ... /> in irgendwelche resources xml ein values)
Aktualisieren: ViewTarget war seit 4.8.0 veraltet. Wenn Sie verwenden into(ImageView)müssen Sie immer noch die Methode der veralteten Klasse aufrufen, da die eingebaute *ViewTarget Klassen erweitern immer noch die alte Klasse.
Wenn Sie eine benutzerdefinierte verwenden ViewTargetzu migrieren CustomViewTarget als Ersatz. Dadurch entfällt die Notwendigkeit, eine Tag-ID festzulegen, da das Standardverhalten für CustomViewTarget verwendet eine Glide-spezifische ID, daher sollte sie mit keiner kollidieren setTag Anrufe. Wenn Sie die ID trotzdem anpassen möchten, können Sie verwenden useTagId auf Ihrem benutzerdefinierten Ziel.
Diese Lösung funktioniert nicht. Die Lösung besteht darin, einfach den Aufruf der Methode setTag() zu vermeiden.
– Jorgesys
26. Februar 2016 um 15:32 Uhr
@Elenasys Dieser Ansatz konfiguriert Glide so, dass es mit Single- kompatibel istImageView Artikel auflisten. ich öffnete #370 was zum Hinzufügen der führte setTagId Methode fast ein Jahr vor dieser Frage in Erwartung, dass sie später auftauchen könnte. Glide muss Anfragen irgendwie mit Zielen (Ansichten) verknüpfen und so wurde es ursprünglich entworfen und es funktioniert in den meisten Fällen gut. In anderen Fällen benötigen Sie möglicherweise eine kleine Konfiguration, genau wie bei jedem anderen Framework / jeder anderen Bibliothek.
– TWiStErRob
26. Februar 2016 um 16:08 Uhr
@Elenasys Es funktioniert tatsächlich. Habe es gerade probiert. Der Aufruf von setTag() ist manchmal unvermeidlich, insbesondere wenn die ImageView eine benutzerdefinierte Ansicht aus einer Bibliothek eines Drittanbieters ist.
– PinguinBlues
23. Juni 2016 um 11:03 Uhr
@JasonStack Es ist wirklich einfach, folgen Sie einfach, wohin diese ID geht und wer anruft getRequest(). Glide speichert das Anforderungsobjekt standardmäßig im Standard-Tag der Ansicht. Beachten Sie die unterschiedliche Überlastung von setTag basierend auf dem Vorhandensein einer benutzerdefinierten ID.
– TWiStErRob
13. Dezember 2017 um 15:26 Uhr
ViewTarget ist veraltet!
– Ahmed Hegazy
9. April 2019 um 17:04 Uhr
P Wartak
Glide verwenden setTag(Object) Methode intern. Entfernen Sie also alle Anrufe von setTag(Object) aus Ihrer Zielansicht. dh ImageView
Wenn Sie wirklich verwenden müssen setTag Methode aus Ihrer Sicht, die Sie verwenden können setTag(int,Object) Methode statt.
Vielen Dank. Wenn Sie eine ganzzahlige Konstante als ersten Parameter verwenden, erhalten Sie eine Ausnahme: java.lang.IllegalArgumentException: The key must be an application-specific resource id.. Siehe also die akzeptierte Antwort oder stackoverflow.com/questions/2859574/….
– CoolMind
26. November 2018 um 16:13 Uhr
Ja, Sie müssen die Ressource für den ersten Parameter verwenden. Wie in SetTag(int,Object) JavaDoc erwähnt
– P Wartak
28. November 2018 um 5:29 Uhr
Shaahin Sh
Nach dem, was ich bei Google gefunden habe, scheinen Glide und ViewHolder nicht allzu gut miteinander auszukommen. Ich habe es stattdessen mit Picasso versucht. Problem sofort gelöst.
Sie können auch die Lösung von TWiStErRob ausprobieren, aber stellen Sie sicher, dass Sie Glide 3.6.0 oder höher verwenden. Es hat setTagId(int) auf 3.5.2 nicht erkannt
Danke für den Versionstipp, ich habe meine Antwort aktualisiert. Wir sind bei 3.7.0 und es gibt keinen Grund, nicht die neueste Version zu verwenden (Glide ist veraltet).
– TWiStErRob
26. Februar 2016 um 10:39 Uhr
Ein weiterer Softfix dafür, den ich verwendet habe, besteht darin, die ImageView in eine andere Ansicht wie CardView einzubinden und jetzt das Tag für die Kartenansicht festzulegen. (Wenn Sie das Tag verwenden müssen).
– Deepak Kumar
17. September 2019 um 7:28 Uhr
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.
}
}
});
Ich hatte das gleiche Problem, nachdem ich Folgendes entfernt hatte
android:tag="xx"
Aus dem Bild in meinem XML-Layout war dieses Problem verschwunden
Ali Aschraf
Wenn Sie die Freiheit dazu haben andere Bibliothek verwendenverwenden, sonst können Sie verwenden setTag(int, Objekt)aber wenn du das oben nicht kannst Wrap ImageView in einem einfachen LinearLayout > setTag() auf LinearLayout > setOnClickListener auf LinearLayout.
Etwas wie :
LinearLayout imgViewLinearLayout = new LinearLayout(context);
imgViewLinearLayout.setOrientation(LinearLayout.HORIZONTAL);
imgViewLinearLayout.setId(R.id.dummy_image_layout);
imgViewLinearLayout.setOnClickListener(this);
ImageView imageView = new ImageView(inflater.getContext());
imageView.setPadding(0,15,20,0);
imageView.setId(R.id.imageview_for_glide);
imgViewLinearLayout.setTag("Image VIEWTAG");
imgViewLinearLayout.addView(imageView)
Überschreiben Sie onClick und :
@Override
public void onClick(View v) {
if(v.getId() == R.id.dummy_image_layout){
//Do what you wanna wanted to do on click of ImageView
}
}
Hoffe das hilft.
Wie geschrieben von Thu Thukönnen Sie einfach auf eine verweisen id von eventuell vorhandenen View. Angenommen, Sie möchten Tag auf an setzen ImageView:
image_view.setTag(R.id.image_view, 100)
if (image_view.getTag(R.id.image_view) == 100) ...
10552700cookie-checkFehler „Sie dürfen setTag() nicht für eine Ansicht aufrufen, auf die Glide abzielt“, wenn Glide verwendet wirdyes
Wickeln Sie Ihre ImageView in eine ViewGroup (z. B. LinearLayout) ein.
– Simon Marquis
19. Januar 2016 um 11:49 Uhr
@AmayDiam Ich habe die Lösung gepostet! schönen Tag noch!
– Jorgesys
10. Februar 2016 um 3:59 Uhr