Android: Knopf nach ID suchen

9

Ich habe ein Problem mit der Suche nach Schaltflächen. Ich habe eine AlertDialog , wo ich eine von 5 Optionen auswähle. Wenn ich eine Option auswähle, möchte ich die Farbe der Schaltfläche ändern, auf die ich geklickt habe. Ich deklarierte Schaltflächen in der XML-Datei in <RealativeLayout> , aber wenn ich versuche, meine Schaltfläche nach ID zu finden (IDs sind wie "ID1", "ID2" ...) mit der Methode findViewById , gibt es einen Fehler, der sagt, dass ich diese Methode nicht wie ich verwenden kann:

%Vor%

Wie kann ich das beheben oder vielleicht sollte ich eine andere Methode verwenden?

BEARBEITEN:

Ich glaube, ich habe mein Problem gelöst. Ich habe eine der Methoden von Button verwendet: getId () wie folgt:

%Vor%     
Ziva 11.01.2013, 21:25
quelle

4 Antworten

3

Hintergrund: IDs sind im Wesentlichen Variablen

In den XML -Dateien geben wir den Ressourcen IDs, und dann verwenden die Compiler all diese, um gen/R.java zu generieren. Im Wesentlichen sind diese IDs int-Variablen, die zur Klasse R gehören. Ein Beispiel für R.java:

%Vor%

Nur weil ein String existiert, das einen gültigen Namen einer Variablen ( R.id.id1 ) enthält, kann er nicht auf diese Variable zugreifen. Um dies zu tun, kann man reflection verwenden. In diesem Fall glaube ich jedoch, dass es eine unnötige Komplikation ist und sogar langsamer sein wird.

findViewById benötigt eine ID (Integer-Variable):

Sie können dieser Funktion keinen String zuweisen. Sie sollten einen ganzzahligen Wert verwenden, und zwar diejenigen, die den int-Variablen in R.java entsprechen. Zum Beispiel:

%Vor%

Lösung:

Sie können den ganzzahligen Wert dynamisch auswählen:

%Vor%

Es wird auch empfohlen, mehr erklärende IDs zu verwenden, zB: buttonDoThis , buttonDoThat .

    
Paschalis 11.01.2013 21:32
quelle
2
%Vor%

Sie übergeben String anstelle von Ganzzahl.

    
Ramesh Sangili 11.01.2013 21:32
quelle
0

Sie versuchen, findViewById () mit einem String zu verwenden, der den Variablennamen der ID enthält. Java unterstützt diese Art von dynamischen Variablennamen nicht, da Variablennamen nur zur Kompilierzeit und nicht zur Laufzeit bekannt sind. Was versuchst du zu machen? Sie müssen einen anderen Weg finden, um dieses Problem zu lösen. Bitte erläutern Sie weiter und wir können Ihnen Vorschläge machen.

    
Code-Apprentice 11.01.2013 21:37
quelle
0

Wenn Sie für den Dialog Ihre eigene layout.xml verwenden, müssen Sie sie zuerst aufblasen und die Ansicht Ihrem Dialog Builder geben.

%Vor%     
TouchBoarder 11.01.2013 21:38
quelle

Tags und Links