2010-08-06 8 views
1

j'ai fait quelques modifications à mon dossier preferences.xml, rien qui a généré des drapeaux de syntaxe dans Eclipse, et maintenant je me fais l'erreur bizarre suivante lorsque je tente de gonfler mon PreferencesActivity:exception étrange de PreferencesActivity

E/AndroidRuntime (3480): java.lang.RuntimeException: Impossible de démarrer l'activité Co mponentInfo {com.shipmate/com.shipmate.PreferencesActivity}: java.lang.IllegalArg umentException: Impossible d'ajouter un PreferenceCategory directement à un PreferenceCategory

J'ai toujours PreferenceCategory à l'intérieur d'autres PreferenceCategory alors je ne pense pas que ce soit le problème. Qu'est-ce que cela signifie qu'il pense que j'ajoute une catégorie de préférence à une autre? Que signifie "ajouter" en XML? Et comment un IllegalArgument se rapporte-t-il à cet ajout? Des idées sur la façon dont je pourrais isoler ce problème?

+0

Pouvez-vous montrer le xml de votre activité de préférences? –

Répondre

2

J'ai toujours de PreferenceCategory dans d'autres années PreferenceCategory donc je ne pense pas que ce soit le problème.

Par ma lecture du code source Android, PreferenceCategory ne peut pas être un enfant immédiat de PreferenceCategory. De plus, vous ne devriez jamais avoir besoin de cela, car cela n'a aucun avantage visuel - les éléments PreferenceCategory sont les pairs les uns des autres dans le XML, pas imbriqués.

Qu'est-ce que cela signifie qu'il pense que je suis « ajouter » un PreferenceCategory à une autre?

Euh, cela semble assez explicite. Vous avez un PreferenceCategory, et vous essayez d'en mettre un autre PreferenceCategory à l'intérieur. Ceci est fait, que ce soit dans le code ou via l'inflation, via une méthode addPreference() sur PreferenceGroup. Qui à son tour appelle onPrepareAddPreference(), qui dans PreferenceCategory vérifie la catégorie-dans-catégorie et lève votre exception.

Et comment un objet illégal se rapporte-t-il à cet ajout?

C'est la saveur particulière de RuntimeException que les développeurs Android ont choisi d'utiliser dans ce cas. Ils auraient pu choisir DivideByZeroException, par exemple, mais cela aurait été plutôt étrange.

Questions connexes