3
votes

Migration des préférences vers AndroidX

J'essaie de migrer mes anciennes activités de paramètres générées automatiquement (à partir de la galerie d'activités dans Android Studio) vers AndroidX . Malheureusement, je ne trouve aucune information sur la façon de procéder. La documentation officielle n'est pas très utile, car elle suppose que vous avez déjà tout le code en place pour ajouter vos fragments de préférence et XML .

J'ai essayé de passer de l'ancien PreferenceScreen à celui AndroidX et de PreferenceFragment à PreferenceFragmentCompat , mais cela seulement entraîne une exception d'exécution.

Quelqu'un sait-il comment effectuer une telle migration?


4 commentaires

Assurez-vous d'ajouter cette implémentation «androidx.preference: préférence: 1.0.0». Utilisez-vous java ou kotlin?


J'utilise Java et la dépendance est ajoutée.


Oops! désolé, je n'ai aucune référence java, mais j'utilise PreferenceFragmentCompat dans kotlin presque tous les projets. Pouvez-vous partager l'erreur


android.preference.PreferenceActivity.switchToHeaderInner () lance android.app.Fragment $ InstantiationException: tentative d'instanciation d'une classe xxx.SettingsActivity $ GeneralPreferenceFragment qui n'est pas un fragment


3 Réponses :


-1
votes

Accédez à l'option Refactoriser dans le ruban d'Android Studio. Cliquez ensuite sur Migrer vers AndroidX .

Ajoutez également ces deux lignes dans le fichier build.properties :

android.useAndroidX=true
android.enableJetifier=true

Ces lignes forceront les classes qui ne sont pas déplacées vers AndroidX à migrer pendant la migration.

Remarque : Veuillez sauvegarder votre projet lorsque vous y êtes invité! Si vous ne savez pas grand-chose sur AndroidX, veuillez sauvegarder votre projet, puis essayez-le!


1 commentaires

Malheureusement, cela ne migre pas les préférences.



3
votes

Pour répondre à ma propre question, cela ne vaut pas la peine de migrer l'activité de préférence existante. Il est plus rapide d'en créer un vide et de définir manuellement des fragments, comme dans la documentation. Tout semble fonctionner dans ce cas et la plupart du code précédent n'est pas utilisé.


0 commentaires

0
votes

J'ai dû migrer un projet existant vers AndroidX.

Je viens donc de passer à PreferenceFragmentCompat.

Pour vous donner une idée, voici un exemple de code:

Java:

<androidx.preference.PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
    android:key="@string/PREF_SCR_MAIN">

    <androidx.preference.PreferenceCategory
        android:key="@string/PREF_CAT_MAIN"
        android:title="@string/pref_cat_main">

        <androidx.preference.CheckBoxPreference
            android:key="@string/TOUCH_TWICE_TO_EXIT"
            android:summary="@string/pref_sum_touch_twice_to_exit"
            android:title="@string/pref_title_touch_twice_to_exit" />

    </androidx.preference.PreferenceCategory>

</androidx.preference.PreferenceScreen 

xml:

public class SettingsFragment extends
        androidx.preference.PreferenceFragmentCompat implements
        androidx.preference.Preference.OnPreferenceClickListener,
        androidx.preference.Preference.OnPreferenceChangeListener {
       // ... your code
}


0 commentaires