69 votes

Android: Démarrer l'activité à partir de preferences.xml

Je voudrais commencer une Activité à partir d'un défaut preferences.xml avec < intention > balise. Les Activités sont bien testés, le problème n'est pas avec ça. (Je suis l'extension de PreferenceActivity dans mon application, de sorte que le preferences.xml est "livré" avec qui) Veuillez regarder le code, quel est le problème?

preferences.xml:

.... 
<PreferenceCategory 
    android:title="@string/titleEtcSetup">
    <PreferenceScreen
        android:key="renameCourses"
        android:title="@string/titleRenameCourses"
        android:summary="@string/textRenameDisplayedCoursesNames">
        <intent
             android:action="android.intent.action.VIEW"
             android:targetPackage="my.notifier.ui"
             android:targetClass="my.notifier.ui.EditCoursesNamesActivity" />         
    </PreferenceScreen>
.....
</PreferenceCategory>
..... 

manifest.xml:

....
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="my.notifier.ui"....
....
<activity android:name=".EditCoursesNamesActivity" android:label="@string/titleRenameCourses">
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
 .....

L'Activité n'est pas de l'appeler quand j'appuie sur le "renameCourses point", rien ne se passe. Le LogCat est "clair", pas d'erreurs ou d'avertissements. J'étais à la recherche d'un lot, et je n'ai pas trouver une solution, j'ai peut-être raté quelque chose... s'il vous Plaît aider!

67voto

Shygar Points 499

J'avais le même problème. Cela fonctionne en déclarant uniquement l'action dans mon fichier AndroidManifest.xml, en tant que tel:

 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.mycompany.myapp" android:versionName="1.3" android:versionCode="4">

...

    <activity android:name=".activities.MyActivity" 
              android:label="@string/my_activity_title"
              android:theme="@android:style/Theme.Black.NoTitleBar">
        <intent-filter>
           <action android:name=".activities.MyActivity" />
           <category android:name="android.intent.category.DEFAULT" />
       </intent-filter>
    </activity>
 

Puis dans mon fichier XML Préférences:

 <PreferenceCategory
        android:title="@string/my_activity_title">
    <PreferenceScreen
        android:title="@string/my_activity_title" 
        android:summary="@string/my_activity_title">
        <intent android:action=".activities.MyActivity"/>
    </PreferenceScreen>
</PreferenceCategory>
 

52voto

Michael Points 16659

Je crois que les balises <intent> doivent être à l'intérieur de <Preference> , pas <PreferenceScreen> .

 <PreferenceCategory 
    android:title="@string/titleEtcSetup">
    <Preference
        android:key="renameCourses"
        android:title="@string/titleRenameCourses"
        android:summary="@string/textRenameDisplayedCoursesNames">
        <intent
             android:action="android.intent.action.VIEW"
             android:targetPackage="my.notifier.ui"
             android:targetClass="my.notifier.ui.EditCoursesNamesActivity" />         
    </Preference>
.....
</PreferenceCategory>
 

35voto

BoD Points 3490

Mise en garde! La valeur de targetPackage doit être l'ID de package de l'application, telle que déclarée dans l'élément racine de votre fichier AndroidManifest.xml . Ce n'est pas nécessairement le même que le package Java de votre classe d'activité (les utilisateurs les placent généralement dans un sous-package de "ui" ).

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

23voto

dvikv90 Points 61

Pas besoin d'ajouter IntentFilter. Vous pouvez faire référence à une activité par nom complet:

 <intent android:targetPackage="my.notifier.ui"
    android:targetClass="my.notifier.ui.EditCoursesNamesActivity"/>
 

4voto

Kieran Points 282

Quand j'ai eu ce problème, c'est parce que j'avais créé un sous-paquet pour mes activités. Quand je l'ai déplacé dans le paquet racine, l'écran Préférences pourrait le lancer.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X