Sollten String-Referenzen nicht für Aktionsnamen eines Intent-Filters in AndroidManifest funktionieren?

9

Ursprünglich enthielt meine AndroidManifest.xml eine Aktivität, die ich über ihren benutzerdefinierten Aktionsnamen erreichte.

%Vor%

Mit diesem Manifest hat startActivity(new Intent("com.company.project.TestActivity")); meine Aktivität ohne Probleme gestartet.

Aber ich war nicht mit diesem Programmierstil zufrieden. Frühere I wurde streng mal angewiesen, nicht in-line definierte String-Konstanten zu verwenden, weil es zu weniger wartungsfähigem Code führen würde. Und es ist wirklich ein Punkt.

Also habe ich zuerst ein p ublic static final String MY_ACTION = "com.company.project.TestActivity"; in meiner App.java-Klasse deklariert (die, die ich benutzt habe) und meine Komponente über diese benannte Konstante auf diese Weise erreicht:

startActivity(new Intent(App.MY_ACTION));

Das schien viel besser zu sein, aber ich musste immer noch zwei Instanzen der gleichen Zeichenfolge beibehalten. Unter Ссылка lesen Sie

  

... Dies kann auch eine Referenz auf eine Ressource sein (in der Form "@ [package:] type: name") oder Thema-Attribut (in der Form "? [package:] [type:] name") einen Wert dieses Typs enthalten.

Ich vermutete, es wäre in Ordnung, wenn diese Zeichenfolge JUST ONCE definiert wäre. Ich habe <string name="MY_ACTION">com.company.project.TestActivity</string> in meine strings.xml geschrieben und meine App geändert:

%Vor%

Und alles war immer noch O.K.

... bis ich meine AndroidManifest.xml geändert habe, um <action android:name="@string/MY_ACTION" /> anstelle von <action android:name="com.company.project.TestActivity" /> zu verwenden. Nach dieser Änderung zu meiner größten Überraschung brach die Anwendung zur Laufzeit ab und beschwerte sich darüber, die Aktivität nicht für meine Absicht zu finden. Die Zeichenfolgenreferenz wurde wahrscheinlich nicht korrekt analysiert. : (

Vielleicht ist das Problem, dass R.string config abhängig ist ...? Aber hey, ich kann nicht so wahnsinnig sein, eine solche String-Referenz zu wählen, deren Wert sich von Config zu Config ändern kann! Und developer.android.com hat mir gesagt, dass es O.K. Referenzen bei Aktionsnamen verwenden! Ich habe dieses Verhalten auf API-Ebene 6, 7, Ende 8 erlebt. Ist es nur ein einfacher Fehler im Android-System? Oder verstehe ich etwas falsch?

Ich bin total verwirrt, bitte hilf mir. Vielen Dank im Voraus.

    
Zsolt Szikora 13.12.2010, 23:23
quelle

1 Antwort

4

Ich hatte heute das gleiche Problem und bin anderswo nach einer Antwort gesucht. Es scheint nach Dianne Hackborne, dass was wir versuchen zu tun ist nicht erlaubt. Sie müssen die Literalstrings anscheinend in Intent-Filtern verwenden.

Ссылка

    
MarkG 20.03.2011, 21:44
quelle