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.

5voto

Brandon Thompson Punkte 125

Die obigen Antworten erscheinen flüchtig und unzuverlässig. Ich habe versucht, dies mit einem ImageView in einem einfachen relativen Layout zu tun, und es hat nicht das onClick-Ereignis deaktivieren.

Was bei mir funktioniert hat, war die Verwendung von setEnabled.

ImageView v = (ImageView)findViewByID(R.id.layoutV);
v.setEnabled(false);

Sie können dann überprüfen, ob die Ansicht mit aktiviert ist:

boolean ImageView.isEnabled();

Eine andere Möglichkeit ist die Verwendung von setContentDescription(String string) und String getContentDescription() zu verwenden, um den Status einer Ansicht zu bestimmen.

4voto

saigopi.me Punkte 11504

Einfach gesagt, hat es bei mir funktioniert.

itemView.setOnClickListener(null);

3voto

androidmalin Punkte 841
    /**
 * Remove an onclick listener
 *
 * @param view
 * @author malin.myemail@gmail.com
 * @website https://github.com/androidmalin
 * @data 2016-05-16
 */
public static void unBingListener(View view) {
    if (view != null) {
        try {
            if (view.hasOnClickListeners()) {
                view.setOnClickListener(null);

            }

            if (view.getOnFocusChangeListener() != null) {
                view.setOnFocusChangeListener(null);

            }

            if (view instanceof ViewGroup && !(view instanceof AdapterView)) {
                ViewGroup viewGroup = (ViewGroup) view;
                int viewGroupChildCount = viewGroup.getChildCount();
                for (int i = 0; i < viewGroupChildCount; i++) {
                    unBingListener(viewGroup.getChildAt(i));
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

-1voto

Rockit Rockit Punkte 148

Eine Neuinitialisierung des Elements wie unten beschrieben würde genügen. Es würde onclick, onlonglick, onitemclick, onitemlongclick basierend auf dem Element entfernen

mTitleView = findViewById(R.id.mTitleView);

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