5 Stimmen

Android - Zwei onClick-Listener und eine Schaltfläche

Ich habe einen benutzerdefinierten TextView, der anklickbar ist. Es definiert seinen eigenen onClick-Handler, um sein Aussehen basierend auf Klicks zu ändern. Wenn ich jedoch einen zweiten onClick-Handler in meiner Aktivität definiere, um basierend auf den angeklickten Button etwas zu tun, wird nur eine der onClick-Funktionen aufgerufen. onClick ist eine void-Funktion - gibt es einen Weg zu sagen, dass ich diesen Klick nicht bearbeitet habe, bitte leite ihn an andere onClick-Handler weiter?

Um genauer zu sein, hier ist der Code:

Im Inneren von MyCheckButton, das TextView erweitert, habe ich:

    setOnClickListener( mClickListener );

    private OnClickListener mClickListener = new OnClickListener() {
        public void onClick(View v) {
            toggle();
        }
    };

Wenn ich jedoch MyCheckButton in meine Aktivität einbinde und natürlich etwas tun muss, wenn darauf geklickt wird, hefte ich einen anderen OnClickListener daran:

MyCheckButton button= (MyCheckButtonButton) findViewById(R.id.cb);
button.setOnClickListener(new OnClickListener(){
    @Override
    public void onClick(View v) {
        // etwas in der App tun
    }

});

Indem ich setOnClickListener zweimal aufrufe, scheint es, dass ich den ursprünglichen Listener ersetze, sodass toggle(), das das Aussehen ändert, nie aufgerufen wird. Wie kann ich etwas in meiner Aktivität tun, wenn auf diesen Button geklickt wird, wenn er bereits den onClick-Handler verwendet, um sein Aussehen zu ändern? Ich dachte, ich würde einfach beide OnClickListeners sehen, die aufgerufen werden.

0voto

theDuke Punkte 1

Für irgendeinen Grund konnte ich die oben genannten Antworten nicht verwenden, also hier ist eine Alternative: //Ich hatte das alles in einer Methode, in der ich zwei Schaltflächen hatte, und abhängig von externen Faktoren wäre eine sichtbar und die andere nicht, also 'verschwunden'. Also, ich hatte das überprüft! Hoffe, es hilft jemandem!!

Button b = (Button) findViewById(R.id.b_reset);
Button breakk = (Button) findViewById(R.id.b_break);

    if ((findViewById(R.id.b_reset)).getVisibility() == View.VISIBLE) {
        b.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

//einige Codes und Methoden...

            }
        });
    } else if ((findViewById(R.id.b_break)).getVisibility() == View.VISIBLE) {

        breakk.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

//einige Codes und Methoden...

            }
        });
    }

0voto

rgy Punkte 13

Im ersten Klassenraum einen virtuellen Button definieren:

private static Button myVirtualButton = new Button(context);

... und eine öffentliche Methode, um ihn zu registrieren:

public static void registerMyVirtualButton(Button b) { myVirtualButton = b;}

Im OnClickListener die gewünschte Aktion ausführen und am Ende den virtuellen Button "softklicken":

if (myVirtualButton!=null) { myVirtualButton.callOnClick(); }

Im zweiten Klassenraum einen Button und seinen OnClickListener mit der gewünschten zusätzlichen Aktion definieren.

Übertrage den Button in den ersten Klassenraum über registerMyVirtualButton. Beim Klicken des Objekts der ersten Klasse werden beide Aktionen ausgeführt.

-3voto

dsr Punkte 1296

Sie können auf folgende Weise einen OnClick-Listener an die Schaltfläche anhängen :

Button button= (Button) findViewById(R.id.button1);
    button.setOnClickListener(new OnClickListener(){
      @Override
      public void onClick(View v) {
          // do something
      }

    });

Auf ähnliche Weise sollte Ihr TextView seinen OnClick-Listener haben.

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