Wie funktioniert die Anweisung "android:onClick" genau?

  • Antworten:5
  • Bentwortet
Johannes S.
  • Forum-Beiträge: 2

24.01.2015, 21:55:02 via Website

Hi Leute,

ich bin neu hier im Forum, und möchte direkt mal eine Frage stellen, auf die ich ansatzweise Lösungen auf Google und sogar in einem Thread in diesem Forum gefunden habe, aber diese konnten mir die Frage auch nicht wirklich beantworten.

Und zwar würde ich gerne wissen, wie beispielsweise die Anweisung

android:onClick="onButtonClick"

im layout.xml meiner App funktioniert. Diese Anweisung ermöglicht es ja, dass ich in meiner Activity Klasse eine Methode

public void onButtonClick(View view){
//TODO
}

schreiben kann, die dann beim Klick auf den entsprechenden Button aufgerufen wird. Nur was passiert im Hintergrund genau, dass es zu diesem Methodenaufruf kommt?

Vielen Dank im Voraus!

— geändert am 24.01.2015, 22:02:07

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

24.01.2015, 22:01:04 via Website

Hallo Johannes,

Herzlich willkommen bei uns im Forum :)
Bitte beachte, dass Threads mit nicht aussagekräftigem Titel bei uns üblicherweise den Regeln entsprechend entfernt werden. Ich bitte dich daher, deinen Threadtitel innerhalb der nächsten 24 Stunden, spätestens jedoch bei deinem nächsten Besuch noch etwas aussagekräftiger zu gestalten (Hierfür einfach unter deinem ersten Beitrag auf 'bearbeiten' klicken, dann kannst du oben noch mal den Titel anpassen)
Danke :)


Willst zu zu anfang wirklich schon so tief in die programmierung einsteigen?
Normalerweise muss man das zum Programmieren nicht wissen ;)

Ich selbst weiss auch nicht wie das genau abläuft, wahrscheinlich wird der String aus der XML geladen und auf die jeweilige Methode aus dem String invoked.
Das szenario kann man auch nachstellen, ist aber nicht einfach zu verstehen.
LG Pascal

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Stefan W
  • Forum-Beiträge: 424

24.01.2015, 22:04:33 via Website

Hier bitte :

case R.styleable.View_onClick:
                if (context.isRestricted()) {
                    throw new IllegalStateException("The android:onClick attribute cannot " 
                            + "be used within a restricted context");
                }

                final String handlerName = a.getString(attr);
                if (handlerName != null) {
                    setOnClickListener(new OnClickListener() {
                        private Method mHandler;

                        public void onClick(View v) {
                            if (mHandler == null) {
                                try {
                                    mHandler = getContext().getClass().getMethod(handlerName,
                                            View.class);
                                } catch (NoSuchMethodException e) {
                                    throw new IllegalStateException("Could not find a method " +
                                            handlerName + "(View) in the activity", e);
                                }
                            }

                            try {
                                mHandler.invoke(getContext(), View.this);
                            } catch (IllegalAccessException e) {
                                throw new IllegalStateException("Could not execute non "
                                        + "public method of the activity", e);
                            } catch (InvocationTargetException e) {
                                throw new IllegalStateException("Could not execute "
                                        + "method of the activity", e);
                            }
                        }
                    });
                }
                break;

Source Code View Class

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

24.01.2015, 22:06:18 via Website

@Stefan: Danke :)

Dachte ich es mir doch.
Einen Invoke auf die Methode der jeweiligen Activity

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Johannes S.
  • Forum-Beiträge: 2

24.01.2015, 22:15:04 via Website

Danke Euch Beiden für die schnellen Antworten!:)

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

25.01.2015, 10:21:49 via App

Hallo Johannes,
da deine Frage geklärt ist, setze den Thread bitte noch auf beantwortet indem du im Browser oben auf "Mehr"->Beantwortet klickst.

Danke

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten