Xml Attribut wie onClick erstellen

  • Antworten:2
Aaron B.
  • Forum-Beiträge: 206

01.09.2013, 19:22:40 via App

Hallo @all!

Ich möchte ein xml-Attribut wie onClick machen: Wenn eine bestimmte Aktion passiert, wird mithilfe des Namens einer Methode der Parent-Activity ausgeführt.

Also z. B.:
1in Xml:
2onClick="test"
3
4in der Activity, in der der Button / der View registriert ist:
5public void test (View v) {
6//stuff
7}

Es funktioniert auch bis jetzt fast alles, aber beim Ausführen der Methode mit Method.invoke (Object receiver, Object [] parameter) benötige ich den "receiver" aus der Activity.

Mein Code: (In RPGView class):
1Method m = getContext().getClass().getMethod(o.getOnFieldAccess(), new Class[]
2 {
3 Integer.class,
4 Integer.class,
5 Integer.class
6 });
7 Button b;
8 m.invoke(HereShouldItBe , new Object[]
9 {
10 Integer.valueOf(getCurrentXPosition()),
11 Integer.valueOf(getCurrentYPosition()),
12 Integer.valueOf(getCurrentDirection())
13 });

In meiner Activity wird dann ein RPGView angezeigt. Die Methode zum ausführen (o.getOnFieldAccess()) soll auch in dieser Activity stehen.

Da dieses invoke() jedoch nicht in meiner Activity, sondern in meiner RPGView.class ausgeführt werden soll, kann ich für receiver nicht einfach "this" eintragen. Es wäre mir am liebsten, wenn man das object auch nicht über den Constructor von RPGView.class mitgeben müsste, im Notfall würde ich diese Option jedoch in Betracht ziehen.

Also nochmal ganz genau meine Frage: :D

Wie kommt man an den Parameter "receiver" von der Parent-Activity / Class?

Danke für Antworten im Voraus ;)

Antworten
Aaron B.
  • Forum-Beiträge: 206

01.09.2013, 19:35:47 via App

Danke :)

Aber jetzt kommt folgende Exception:

@LogCat
1Can't create handler inside tread that has not called Looper.prepare()

Wie kann man das beheben?

[EDIT]
Ich habe mal die Fehlerstelle gesucht. Der Fehler tritt zwischen class.getMethod() und method.invoke() auf:

1...}
2Object obj = getContext().getClass().newInstance();
3m.invoke (obj, new ...

LG

— geändert am 02.09.2013, 09:09:49

Antworten