Android Reflection zugriff auf setFocusableInTouchMode

Trolok

Mitglied
Ich möchte in meiner App alle Buttons per Reflection focusierbar machen, jedoch kommt immer der Fehler, dass die Methode setFocusableInTouchMode nicht existiert.

Java:
[...]
Class id_class = MainActivity.class;    	
Field[] id_list= id_class.getDeclaredFields(); 
for(int i=0;i<id_list.length;i++){
    		try {
				Object view_object=id_list[i]; 											
				if(((Field) view_object).getGenericType() == Button.class){						
					Method tmeth=view_object.getClass().getDeclaredMethod("setFocusableInTouchMode", Boolean.class);	
					tmeth.setAccessible(true);
					tmeth.invoke(view_object,true);			
					 
				}
[...]

der Fehler (NoSuchMethodException) wird durch die 8te Zeile verursacht. Kann es sein, dass ich Reflection nicht richtig verstanden habe, oder liegt es an der Platform?
 
A

asdfghjl

Gast
Warum Reflection? Du hast doch das Objekt bzw. eine Referenz darauf.
Einfach mit
Code:
instanceof Button
prüfen, ob es sich um ein Button Objekt handelt. Dann nach Button casten und daran die Methode aufrufen.
Keine Ahnung ob Du Refection falsch verstanden hast, aber Du wendest sie auf jeden Fall nicht richti an.
 
S

SlaterB

Gast
gehört die Methode zu einer Super-Klasse?

getDeclaredMethod() sucht glaube ich tatsächlich in der Klasse deklarierte/ überschriebene Methoden,

getMethod() macht mehr, findet dafür nur public Methoden oder so, testen

Let C be the class represented by this object:

- C is searched for any matching methods. If no matching method is found, the algorithm of step 1 is invoked recursively on the superclass of C.
- If no method was found in step 1 above, the superinterfaces of C are searched for a matching method. If any such method is found, it is reflected.
Class (Java 2 Platform SE 5.0)

edit:
ach und zum Thema Reflection falsch anwenden:
view_object ist hier ein Field, ein Objekt der Klasse Field, kein Button

Field (Java 2 Platform SE 5.0)

wenn man ein MainActivity-Objekt hätte, im Code nicht zu sehen, könnte man den Wert dieses Fields im Objekt holen,
aber die anderen Wege mit instanceof usw. sind besser, falls praktikabel,

vielleicht mit Field.get() das Objekt holen, und dann erst damit arbeiten können
 
Zuletzt bearbeitet von einem Moderator:
N

nillehammer

Gast
Also im Quelltext von java.awt.Button konnte ich die Methode tatsächlich nicht finden. Evtl. in einer seiner Oberklassen? Habe nicht weiter gesucht. Und dann könnte ich mir noch vorstellen, dass diese Methode einen primitiven boolean als Parameter erwartet und keinen Wrapper. Wenn das so ist, wäre Der Klassen-Pararmeter "Boolean.class" in "boolean.class" zu ändern.

Und auch, wenn Du es nicht hören willst: Mach es ohne Reflection! Ich bin sicher, dass es irgendwie anders geht. Lies lieber noch ein bischen Doku, anstatt so einen dirty Hack zu implementieren.

[EDIT]Merke gerade, es geht hier um Android. Da ist der Button wohl gar kein java.awt.Button? Egal, schaue im Zweifel im Source-Code des Android-Buttons nach. Meine Aussagen sind übertragbar.[/EDIT]
 
Zuletzt bearbeitet von einem Moderator:

Trolok

Mitglied
@asdfghjl
einfach casten funktioniert nicht, ClassCast Exception

@SlaterB
Danke dir mit "view_object.getClass()" hast du natürlich recht, ich hatte vorher immer android.View.view.class (in dieser Klasse ist die Methode)da kam der selbe Fehler raus, also ist mir gar nicht aufgefallen, dass ich noch einen Fehler reinbaue.

So nun zur Auflösung, mein Fehler war viel simpler (und um längen peinlicher) es sollte boolean.class und nicht Boolean.class heißen :oops: so wie es Ausschaut läuft das Programm nun.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Android-App Reflection Android & Cross-Platform Mobile Apps 2
W onViewCreated blockiert Session Zugriff gegensatz zu onCreateView? Fragment Android & Cross-Platform Mobile Apps 25
R Android Zugriff auf view von MainActivity Android & Cross-Platform Mobile Apps 7
J Android Zugriff auf eine Datei, diese von einer anderen App erstellt wurde? Android & Cross-Platform Mobile Apps 11
M Zugriff auf Helligkeitsregler von Handy? Android & Cross-Platform Mobile Apps 17
C Zugriff auf die Position eines String- bzw Spinner-Arrays Android & Cross-Platform Mobile Apps 1
E Wie erhalte ich Zugriff auf das Microfon? (Android Studio) Android & Cross-Platform Mobile Apps 9
B Android Kein Zugriff auf Telefonspeicher (Android 6) Android & Cross-Platform Mobile Apps 1
N Zugriff auf TextView in ListItem via ButtonClick Android & Cross-Platform Mobile Apps 4
K Android Zugriff auf FTP-Server Android & Cross-Platform Mobile Apps 1
S Android Zugriff auf Bilder im Telefonspeicher + Galeriedarstellung Android & Cross-Platform Mobile Apps 5
N Android Zugriff auf PlayStore im Abgesicherten Modus verhindern Android & Cross-Platform Mobile Apps 2
L Zugriff auf entfernten mySQL-Server via Android Android & Cross-Platform Mobile Apps 4
L Android Zugriff aus unbound Service auf Preferences Android & Cross-Platform Mobile Apps 2
H Smartphone (Front-)Kamera-Zugriff per Website Android & Cross-Platform Mobile Apps 6
S Android Zugriff auf FTP Server Android & Cross-Platform Mobile Apps 7
S Android Zugriff auf Website fuers Infos Android & Cross-Platform Mobile Apps 2
C Java ME Kein Java Zugriff auf Samsung! Android & Cross-Platform Mobile Apps 5
R Java ME mit Zugriff auf Adressbuch / Kalender Android & Cross-Platform Mobile Apps 3
H FileConnection: Frage nach Dateisystem-Zugriff unterdrücken Android & Cross-Platform Mobile Apps 5
1 zugriff auf handy-microfon Android & Cross-Platform Mobile Apps 2
H Zugriff auf XML/DB oder aehnliches Android & Cross-Platform Mobile Apps 3
G Zugriff auf den gesamten Bildschirm bei PDAs Android & Cross-Platform Mobile Apps 8

Ähnliche Java Themen

Neue Themen


Oben