234 Stimmen

Einen Onclick-Listener entfernen

Ich habe ein Objekt, bei dem der Text zyklisch läuft und Statusmeldungen anzeigt. Wenn sich die Meldungen ändern, möchte ich, dass sich das Klick-Ereignis des Objekts ändert, um Sie zu der Aktivität zu führen, auf die sich die Meldung bezieht.

Also, ich habe eine TextView mTitleView und ich weise das Ereignis folgendermaßen zu.

public void setOnTitleClickListener(OnClickListener listener) {
    mTitleView.setOnClickListener(listener);
}

Wie kann ich dieses Klick-Ereignis entfernen? Es gibt einige Statusmeldungen, die keinen Aktionsbereich haben, so dass ich das Klick-Ereignis gerne ausschalten würde. Ich möchte auch in der Lage sein, durch diese Klick-Ereignisse Zyklus und entsorgen Sie sie richtig, aber ich bin unsicher der besten Praxis.

491voto

Robby Pond Punkte 71994

mTitleView.setOnClickListener(null) sollte das genügen.

Ein besseres Design könnte sein, eine Überprüfung des Status in der OnClickListener zu tun und dann bestimmen, ob der Klick etwas vs Hinzufügen und Löschen von Klick-Listener tun sollte.

156voto

FreewheelNat Punkte 2857

Beachten Sie, dass wenn eine Ansicht nicht anklickbar ist (z.B. eine TextView), die Einstellung setOnClickListener(null) bedeutet, dass die Ansicht anklickbar ist. verwenden mMyView.setClickable(false) wenn Sie nicht wollen, dass Ihre Ansicht anklickbar ist. Wenn Sie z. B. ein xml-Drawable für den Hintergrund verwenden, das verschiedene Farben für verschiedene Zustände zeigt, können die Benutzer, wenn Ihre Ansicht noch klickbar ist, darauf klicken und die unterschiedliche Hintergrundfarbe wird angezeigt, was seltsam aussehen kann.

13voto

Luther Punkte 1706

Vielleicht setOnClickListener(null) ?

11voto

Azim Ansari Punkte 1348

Einstellung setOnClickListener(null) ist eine gute Idee, den Click-Listener zur Laufzeit zu entfernen.

Und außerdem hat jemand bemerkt, dass der Aufruf View.hasOnClickListeners() danach wird zurückgegeben true , NO mein Freund.

Hier ist die Implementierung von hasOnClickListeners() entnommen aus android.view.View Klasse

 public boolean hasOnClickListeners() {
        ListenerInfo li = mListenerInfo;
        return (li != null && li.mOnClickListener != null);
    }

GOTT sei Dank. Sie prüft auf null .

Es ist also alles sicher. Viel Spaß :-)

6voto

Evin1_ Punkte 11586

Sie könnten die folgende Erweiterungsfunktion hinzufügen:

fun View.removeClickListener() {
  setOnClickListener(null)
  isClickable = false
}

Und dann würden Sie Ihre Anrufer anrufen:

val textView = findViewById(R.id.activity_text)
textView.removeClickListener()

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X