Android: Démarrer l’activité depuis preferences.xml

Je voudrais démarrer une activité à partir d’un default preferences.xml, avec la balise . Les activités sont bien testées, le problème n’est pas avec cela. (Je prolonge PreferenceActivity dans mon application, donc le preferences.xml est “vient” avec ça) S’il vous plaît regardez le code, qu’est-ce qui ne va pas?

preferences.xml:

....     .....  ..... 

manifest.xml:

 .... <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="my.notifier.ui".... ....       ..... 

L’Activité n’appelle pas lorsque j’appuie sur “RenameCourses”, rien ne se passe. Le LogCat est “clair”, pas d’erreurs ou d’avertissements. Je cherchais beaucoup, et je n’ai pas trouvé de solution, j’ai peut-être raté quelque chose … S’il vous plaît, aidez-moi!

J’avais le même problème. Je l’ai fait en déclarant uniquement l’action dans mon fichier AndroidManifest.xml, en tant que tel:

  ...       

Ensuite, dans mon fichier XML Préférences:

      

Je crois que la doit se trouver à l’intérieur de

, et non pas .

     .....  

Mise en garde! La valeur de targetPackage doit être l’identifiant du package de l’application, tel que déclaré dans l’élément racine de votre fichier AndroidManifest.xml (que vous définissez dans votre fichier de génération Gradle). Ce n’est pas nécessairement le même que le package Java de votre classe d’activité (les gens les placent généralement dans un sous-paquetage de "ui" ).

Donc, dans votre cas particulier, je vous parie que le targetPackage devrait être "my.notifier" , pas "my.notifier.ui" (il faudrait que je voie le manifeste pour être sûr).

Pas besoin d’append IntentFilter. Vous pouvez vous référer à l’activité par un nom complet:

  

Lorsque j’ai eu ce problème, c’était parce que j’avais créé un sous-paquet pour mes activités. Lorsque je l’ai déplacé dans le package racine, l’écran Préférence peut le lancer.

J’avais le même problème. et résoudre par ceci

androidManifest.xml

          // ==================== HERE ================================       // ========================================================        

et en préférence:

        

J’ai pu corriger cela en changeant la catégorie dans le filtre d’intention de

android.intent.category.DEFAULT

à

android.intent.category.PREFERENCE

http://developer.android.com/reference/android/content/Intent.html#CATEGORY_PREFERENCE

       

Je suppose que si vous voulez que votre action soit encore plus précise, supprimez tout le nœud de la catégorie

      

Cette solution vous montre comment connecter une activité à vos en-têtes de préférences.

Tout d’abord, votre activité cible doit être déclarée dans le manifeste comme ceci:

       

Notez ici que l’androïde: le nom de l’activité et l’action sont les mêmes.

Maintenant, dans votre fichier preferences.xml, il vous suffit de déclarer un en-tête comme ceci:

 

Et c’est tout ce qu’il y a à faire.

targetPackage et targetClass (préfixe) peuvent différer en raison du nom du package de refactoring. Un moyen facile de le vérifier, vous pouvez supprimer l’activité dans le manifeste et appeler startActivity() puis vous verrez cette erreur dans logCat: “Impossible de trouver la classe d’activité explicite {‘targetPackage’ / ‘targetClass’}”. Ce sont les bons noms que vous devez écrire dans Préférence> intention. Le filtre d’intention n’est pas nécessaire.

J’ai résolu le même problème en déclarant le dans le manifeste comme suit:

    /*Same as in the preference's  element's action atsortingbute*/