2010-03-12 10 views
13

Ja, ich weiß, Sie benötigen eine eindeutige Ressource-ID beim Aufruf der Version dieser Funktionen, die einen Schlüssel erfordert, aber ich kann nicht für das Leben von mir herauszufinden, wie eine Ressource ID erstellen das kann auf diese Weise verwendet werden. Eine letzte Variable in meiner Klasse wird nicht funktionieren und auch kein fest codierter Wert. Beide warfen eine IllegalArgumentException ab. Also was gibt, wie benutzt du diese Methoden?Android: View.getTag/setTag und IllegalArgumentException

Spara

Antwort

13

Von the Javadoc:

Der angegebene Schlüssel sollte eine ID in den Ressourcen deklariert sein der Anwendung zu gewährleisten, ist es einzigartig ist.

So können Sie nicht nur Werte bilden und sie in einer lokalen Variablen platzieren.

Jede Ressource, die Sie erstellen, ob es sich um eine Zeichenfolge (R.string.*) ist, oder ein Layout (R.layout.*) oder eine individuelle View (R.id.*) kann eine ID haben. Das müssen Sie schon machen.

Wenn Sie mehrere Objekte gegen eine einzelne View speichern müssen, müssen Sie die R.id Variante als Schlüssel verwenden, wie someView.setKey(R.id.my_key_1, someObject).

+17

Beachten Sie auch, dass ich Beschwerden aus dem Core-Android-Team bekam die indexierter Form von 'getTag für die Verwendung von()' und 'setTag()'. Diese sind so konzipiert, dass sie von Bibliotheken oder anderen wiederverwendbaren Komponenten verwendet werden (die nicht blind das reguläre 'getTag()'/'setTag()' aufrufen können, da sie mit dem Wiederverwender des Codes in Konflikt geraten könnten). Wenn Sie eine solche Bibliothek schreiben, geht es Ihnen gut. Wenn Sie eine gewöhnliche Android-Anwendung schreiben, verwenden Sie die regulären nicht-indizierten 'getTag()'/'setTag()' -Methoden, nur mit einer Sammlung von einigen Formularen (zB 'HashMap'), wenn Sie mehrere halten müssen Wert. – CommonsWare

+1

Ja, das klingt vernünftig. Ich hatte noch nie zuvor von der indizierten Version gehört und konnte mir keinen besonderen Grund vorstellen, mehrere Objekte pro Ansicht zu speichern. –

+3

Die richtige Methode zur Verwendung der indizierten Version von getTag()/setTag() ist die Verwendung von Ressourcen-IDs, wie in R.id. Verwenden Sie nicht R.string oder R.layout als Schlüssel. –

44

Um Ressourcen-ID zu erstellen, die identisch zu denen verwendet werden, können Sie in XML gesetzt (mit @+id), fügen

<resources> 
    <item type="id" name="myId"/> 
</resources> 

in XML in res/values/.

+3

Zum Beispiel: create /res/values/ids.xml und importieren Sie.paket.R; – Damjan

0

können Sie diesen Code verwenden:

<resources xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item name="TAG_ONLINE_ID" type="id"/> 
</resources> 
Verwandte Themen