Ich habe ein Objekt, in dem der Text wechselt und Statusmeldungen anzeigt. Wenn sich die Nachrichten ändern, soll sich das Klickereignis des Objekts ändern, um Sie zu der Aktivität zu führen, auf die sich die Nachricht bezieht.
Also, ich habe eine TextView mTitleView
und ich ordne das Ereignis so zu.
public void setOnTitleClickListener(OnClickListener listener) {
mTitleView.setOnClickListener(listener);
}
Wie entferne ich dieses Klickereignis? Es gibt einige Statusmeldungen, die keinen umsetzbaren Bereich haben, daher möchte ich das Klickereignis deaktivieren. Ich möchte diese Klickereignisse auch durchlaufen und ordnungsgemäß entsorgen können, bin mir jedoch nicht sicher, welche Vorgehensweise empfohlen wird.
a better design
, implizieren Sie Auswirkungen auf die Leistung oder sagen Sie nur, dass es ein bisschen unangenehm ist?Beachten Sie, dass wenn eine Ansicht nicht anklickbar ist (z. B. eine Textansicht), die Einstellung
setOnClickListener(null)
bedeutet, dass die Ansicht anklickbar ist. VerwendenmMyView.setClickable(false)
Sie diese Option, wenn Ihre Ansicht nicht anklickbar sein soll. Wenn Sie beispielsweise eine für den Hintergrund zeichnbare XML-Datei verwenden, die unterschiedliche Farben für unterschiedliche Status anzeigt, können Benutzer darauf klicken, wenn Ihre Ansicht weiterhin anklickbar ist, und die unterschiedliche Hintergrundfarbe wird angezeigt, was möglicherweise seltsam aussieht.quelle
Vielleicht
setOnClickListener(null)
?quelle
Die Einstellung
setOnClickListener(null)
ist eine gute Idee, um den Klick-Listener zur Laufzeit zu entfernen.Und auch jemand hat kommentiert, dass ein Anruf
View.hasOnClickListeners()
danach zurückkehren wirdtrue
, NEIN mein Freund.Hier ist die Implementierung von
hasOnClickListeners()
aus derandroid.view.View
Klasse genommenDanke Gott. Es prüft auf
null
.Also ist alles sicher. Genießen :-)
quelle
Die obigen Antworten scheinen flüchtig und unzuverlässig. Ich habe versucht, dies mit einer ImageView in einem einfachen relativen Layout zu tun, aber das onClick-Ereignis wurde nicht deaktiviert.
Was für mich funktioniert hat, war die Verwendung von setEnabled.
Sie können dann überprüfen, ob die Ansicht aktiviert ist mit:
Eine andere Option ist die Verwendung von setContentDescription (String string) und String getContentDescription (), um den Status einer Ansicht zu bestimmen.
quelle
Einfach gesagt, es hat bei mir funktioniert
quelle
quelle
Nur das Element wie unten neu zu initialisieren, würde den Trick tun. Es würde onclick, onlonglick, onitemclick, onitemlongclick basierend auf item entfernen
mTitleView = findViewById (R.id.mTitleView);
quelle