Basierend auf der Antwort von rekire habe ich diese etwas robustere Lösung entwickelt, die mit jedem Tag umgehen kann.
%Vor%Und in handleTag tun:
%Vor%Und dann sind die Attribute wie folgt zugänglich:
attributes.get ("Mein Attributname");
Es ist möglich, %code% von %code% zu verwenden und Zugriff auf Tag-Attributwerte ohne Reflektion zu erhalten, aber diese Methode ist noch einfacher als die Reflektion. Der Trick besteht darin, %code% used von %code% durch ein benutzerdefiniertes Objekt zu ersetzen. Das Ersetzen von %code% kann nur im Aufruf von %code% erfolgen. Das stellt ein Problem beim Abrufen von Attributwerten für das erste Tag dar, das durch Hinzufügen eines benutzerdefinierten Tags am Anfang von html behoben werden kann.
%Vor%Mit dieser Klasse ist das Lesen von Attributen einfach:
%Vor%Dieser Ansatz hat den Vorteil, dass er die Verarbeitung einiger Tags unter Verwendung der Standardverarbeitung für andere, z. Sie können sicherstellen, dass %code% Objekte nicht erstellt werden:
%Vor%Ich habe HTML, das ich mit %code% in ein %code% konvertiere, und ich habe ein benutzerdefiniertes Tag, das ich darin verwende:
%Vor%Also habe ich ein %code% implementiert, um dieses benutzerdefinierte Tag zu behandeln, so:
%Vor%In diesem Fall bekomme ich eine SAX-Ausnahme, da ich glaube, dass das "id" -Feld eigentlich ein Attribut und keine Eigenschaft ist. Es gibt jedoch keine Methode %code% für %code% . Also meine Frage ist, wie bekomme ich den Wert des Feldes "ID" mit dieser %code% ? Danke.
Es gibt eine Alternative zu den anderen Lösungen, die es nicht erlaubt, benutzerdefinierte Tags zu verwenden, sondern den gleichen Effekt:
%Vor%Dann lies es so:
%Vor%Je nachdem, was Sie mit Ihren benutzerdefinierten Tags tun möchten, können Ihnen die obigen Informationen helfen. Wenn Sie sie nur lesen möchten, brauchen Sie kein %code% , sondern nur %code% auf %code% interface, um dies zu untersuchen.
Beachten Sie, dass %code% , das %code% repräsentiert, seit der API-Stufe 1 ein eingebautes Android ist! Es ist wieder einer dieser versteckten Edelsteine. Das Attribut hat die Einschränkung eines Attributs pro %code% -Tag, aber nichts hindert Sie daran, mehrere Anmerkungen zu verschachteln, um mehrere Attribute zu erhalten:
%Vor%Wenn Sie die Schnittstelle %code% anstelle von %code% verwenden, können Sie auch den Inhalt jeder Anmerkung ändern. Zum Beispiel den obigen Code ändern:
%Vor%wird so aussehen, als ob Sie dies in der XML-Datei hatten:
%Vor%Wenn Sie Änderungen vornehmen, die sich auf die Länge des Textes auswirken, müssen Sie darauf achten, dass sich die Abschnitte verschieben. Stellen Sie sicher, dass Sie die span start / end-Indizes zu den richtigen Zeiten lesen, am besten, wenn Sie sie in die Methodenaufrufe einbinden.
Mit%code% können Sie auch eine einfache Suche durchführen und die Substitution ersetzen:
%Vor%Wenn Sie nur ein Attribut benötigen, ist der Vorschlag von vorrtex eigentlich ziemlich solide. Um Ihnen ein Beispiel zu geben, wie einfach es zu handhaben wäre, schauen Sie hier nach:
%Vor%Und in Ihrem benutzerdefinierten TagHandler verwenden Sie nicht gleich, sondern indexOf
%Vor%Und Sie können dann den Postfix-Wert in Ihrem OnClick-View-Parameter als Tag übergeben, um ihn generisch zu halten.
Hier ist mein Code, um die privaten Attribute von %code% durch Reflektion zu erhalten:
%Vor%Hinweis: Sie könnten die Werte in eine Map einfügen, aber für meine Verwendung ist das zu viel Aufwand.