9

À l'origine, mon AndroidManifest.xml contenait une activité que j'atteignais grâce à son nom d'action personnalisé.Les références de chaîne ne doivent-elles pas fonctionner pour les noms d'action d'un filtre d'intention dans AndroidManifest?

<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> 

Avec cette startActivity(new Intent("com.company.project.TestActivity")); manifeste commencé mon activité sans aucun problème.

Mais je n'étais pas satisfait de ce style de codage. Plus tôt, on m'a dit de ne pas utiliser de constantes de chaînes définies en ligne parce que cela conduirait à un code moins maintenable. Et vraiment est un point.

Alors d'abord je déclare ap ublic static final String MY_ACTION = "com.company.project.TestActivity"; dans ma classe App.java (celui j'ai utilisé pour) et atteint mon composant grâce à cette constante nommé ainsi:

startActivity(new Intent(App.MY_ACTION));

Cela semblait beaucoup mieux, mais je reste a dû maintenir deux instances de la même chaîne. A http://developer.android.com/reference/android/R.styleable.html#AndroidManifestAction_name une lecture

... Cela peut aussi être une référence à une ressource (sous la forme "@ [package:] Type: Nom")? Ou attribut thème (sous la forme »[paquet:] [type:] name ") contenant une valeur de ce type.

donc je devinais Ce serait bien d'avoir cette chaîne définie juste une fois. Je mets <string name="MY_ACTION">com.company.project.TestActivity</string> dans mon strings.xml et modifié mon application:

public class App ... 
    public static String MY_ACTION; 

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

Et tout était encore Ö.K

... jusqu'à ce que j'ai changé mon AndroidManifest.xml pour utiliser <action android:name="@string/MY_ACTION" /> au lieu de <action android:name="com.company.project.TestActivity" />. Après ce changement à ma plus grande surprise l'application est tombée en panne à l'exécution se plaignant de ne pas trouver l'activité pour mon intention. La référence de chaîne n'a probablement pas été correctement analysée. :(

Peut-être que le problème est que R.string dépend de la configuration ... Mais bon je ne peux pas être si fou de choisir une telle référence de chaîne dont la valeur peut changer de config à config! Et developer.android.com dit Je suis d'accord pour utiliser des références sur des noms d'actions! J'ai expérimenté ce comportement aux niveaux 6, 7 et 8 de l'API Est-ce un simple bogue dans le système android ou est-ce que je me méprends quelque chose?

Je suis totalement intrigué, S'il vous plaît aidez-moi Merci d'avance

Répondre

4

J'ai eu le même problème aujourd'hui, et je suis allé chercher une réponse ailleurs, il semble selon Dianne Hackborne que ce que nous essayons de faire n'est pas autorisé. l chaînes dans les filtres d'intention.

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

+0

Salut MarkG, merci, je tends aussi à croire que c'est la situation. Nous ne sommes pas traités comme des adultes capables de séparer les chaînes dépendantes et indépendantes de la configuration. :-) J'accepte ta réponse. –