Frage

Ursprünglich meine AndroidManifest.xml eine Aktivität enthalten, die ich durch seine individuellen Aktionsnamen erreicht.

<activity
 android:label="HERE I AM"
 android:name="TestController">
 <intent-filter>
  <action android:name="com.company.project.TestActivity" />
  <category android:name="android.intent.category.DEFAULT" />
 </intent-filter>
</activity>

Mit diesem Manifest startActivity(new Intent("com.company.project.TestActivity")); begann meine Tätigkeit ohne Probleme.

Aber ich war nicht mit dieser Codierung Stil erfüllt. Earlyer Ich war severeal mal gesagt, nicht definiert String-Konstanten in-line zu verwenden, da es zu weniger wartbaren Code führt wolud. Und es ist wirklich ist ein Punkt.

Also zuerst erklärte ich eine public static final String MY_ACTION = "com.company.project.TestActivity"; in meiner App.java Klasse (die, die ich für verwendet) und erreichte meine Komponente durch diese benannte Konstante auf diese Weise:

startActivity(new Intent(App.MY_ACTION));

So viel besser schien aber ich hatte noch zwei Instanzen derselben Saite zu halten. Bei http://developer.android.com/reference/android/R. styleable.html # AndroidManifestAction_name eine Lese

... Dies kann auch ein Verweis auf eine Ressource (in Form "@ [package:] Typ: name") ( "? [Package:] [Typ:] Name" in der Form) oder Themen Attribut enthält einen Wert dieses Typs.

erraten, damit ich es wäre schön, diese Zeichenfolge definiert haben JUST ONCE . Ich habe <string name="MY_ACTION">com.company.project.TestActivity</string> in meinem strings.xml und geändert meine App:

public class App ...
    public static String MY_ACTION;

    @Override
    public void onCreate() {
        super.onCreate();
        MY_ACTION = getString(R.string.MY_ACTION);
    ...

Und alles war noch O.K.

... bis ich änderte meine AndroidManifest.xml Verwendung <action android:name="@string/MY_ACTION" /> statt <action android:name="com.company.project.TestActivity" />. Nach dieser Änderung zu meiner größten Überraschung brach die Anwendung zur Laufzeit über nicht finden, die Aktivität für meine Absicht beschwerte nach unten. Die String Referenz wurde wahrscheinlich nicht korrekt analysiert. : (

Vielleicht ist das Problem ist, dass R.string abhängig ist Config ...? Aber hey ich kann nicht so verrückt sein, wie ein String Referenz zu wählen, dessen Wert kann von config Config ändern! Und developer.android.com mir es gesagt O. K. ist Verweise auf Aktionsnamen zu verwenden! Ich erleben dieses Verhalten bei API-Ebenen 6, 7, Ende 8. Ist es nur ein einfacher Fehler im Android-System? Oder muss ich falsch verstehen etwas?

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

War es hilfreich?

Lösung

Ich hatte das gleiche Problem heute und ging auf eine Antwort an anderer Stelle zu suchen. Es scheint nach Dianne Hackborne dass das, was wir versuchen, ist nicht erlaubt zu tun. Sie müssen offenbar die Literalzeichenfolgen in Absicht Filter verwenden.

http://android.bigresource.com/Track/android-zKGKHraw9/

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top