Dans l'ensemble, la réorganisation de la hiérarchie des paramètres
simple et consiste généralement à déplacer les préférences et
PreferenceController
dans un autre fichier XML. Si le
PreferenceController
utilise use(...)
, veillez à supprimer
à partir du SettingsFragment
précédent, puis de l'ajouter au nouveau
SettingsFragment
Cette page fournit des exemples de réorganisation des paramètres afin d'examiner les situations dans lesquelles peut survenir.
Déplacer une préférence de base
Cet exemple explique comment déplacer une préférence
d'un écran de préférences à un autre,
dans laquelle la préférence ne dispose
que d'un contrôleur de préférences par défaut. Dans cet exemple, vous
Déplacez la préférence "Unités" de l'écran de préférences "Page d'accueil" vers les préférences "Système".
l'écran. Pour ce faire, déplacez le code XML suivant de homepage_fragment.xml
vers
l'emplacement approprié dans system_settings_fragment.xml
:
<Preference android:icon="@drawable/ic_settings_units" android:key="@string/pk_units_settings_entry" android:title="@string/units_settings" settings:controller="com.android.car.settings.common.DefaultRestrictionsPreferenceController"> <intent android:targetPackage="com.android.car.settings" android:targetClass="com.android.car.settings.common.CarSettingActivities$UnitsSettingsActivity"/> </Preference>
Déplacez une préférence utilisant use(...)
Prenons l'exemple plus complexe suivant, qui déplace toutes les préférences
dans le formulaire d'avertissement Limitez le fragment à un niveau supérieur dans le fragment "Utilisation des données", qui
Met à jour DataWarningAndLimitFragment.java
pour inclure la méthode use
pour transmettre des informations aux contrôleurs de préférences après la construction.
- Déplacez le fichier XML approprié vers l'emplacement souhaité dans
data_usage_fragment.xml
:<Preference android:key="@string/pk_data_usage_cycle" android:title="@string/app_usage_cycle" settings:controller="com.android.car.settings.datausage.CycleResetDayOfMonthPickerPreferenceController"/> <com.android.car.settings.common.LogicalPreferenceGroup android:key="@string/pk_data_warning_group" settings:controller="com.android.car.settings.datausage.DataWarningPreferenceController"> <SwitchPreference android:key="@string/pk_data_set_warning" android:title="@string/set_data_warning"/> <Preference android:key="@string/pk_data_warning" android:title="@string/data_warning"/> </com.android.car.settings.common.LogicalPreferenceGroup> <com.android.car.settings.common.LogicalPreferenceGroup android:key="@string/pk_data_limit_group" settings:controller="com.android.car.settings.datausage.DataLimitPreferenceController"> <SwitchPreference android:key="@string/pk_data_set_limit" android:title="@string/set_data_limit"/> <Preference android:key="@string/pk_data_limit" android:title="@string/data_limit"/> </com.android.car.settings.common.LogicalPreferenceGroup>
- Dans
DataWarningAndLimitFragment.java
, déterminez commentuse
est utilisée.@Override public void onAttach(Context context) { super.onAttach(context); mPolicyEditor = new NetworkPolicyEditor(NetworkPolicyManager.from(context)); mNetworkTemplate = getArguments().getParcelable( NetworkPolicyManager.EXTRA_NETWORK_TEMPLATE); if (mNetworkTemplate == null) { mTelephonyManager = context.getSystemService(TelephonyManager.class); mSubscriptionManager = context.getSystemService(SubscriptionManager.class); mNetworkTemplate = DataUsageUtils.getMobileNetworkTemplate(mTelephonyManager, DataUsageUtils.getDefaultSubscriptionId(mSubscriptionManager)); } // Loads the current policies to the policy editor cache. mPolicyEditor.read(); List<DataWarningAndLimitBasePreferenceController> preferenceControllers = Arrays.asList( use(CycleResetDayOfMonthPickerPreferenceController.class, R.string.pk_data_usage_cycle), use(DataWarningPreferenceController.class, R.string.pk_data_warning_group), use(DataLimitPreferenceController.class, R.string.pk_data_limit_group)); for (DataWarningAndLimitBasePreferenceController preferenceController : preferenceControllers) { preferenceController.setNetworkPolicyEditor(mPolicyEditor); preferenceController.setNetworkTemplate(mNetworkTemplate); } }
Dans ce cas, la méthode
use
définit l'éditeur de règle de réseau. et un modèle de réseau pour les contrôleurs de préférences. Comme cet exemple déplace les préférences et tout le code de la méthodeonAttach
sont pertinents pour définir ces paramètres de préférence, il serait judicieux de copier l'intégralité du code le contenu de la méthode dans le nouveau fragment. Toutefois, cela varie en fonction une préférence spécifique. Vous devez également déplacer les variables d'instance pertinentes.Mais il y a une complication. Fragment d'origine attendu
NetworkPolicyManager.EXTRA_NETWORK_TEMPLATE
pour être transmis en tant qu'argument, qui doit provenir de l'intent envoyé à l'activité (si fournies).Pour obtenir les informations nécessaires, créez un
newInstance
et transmettre le modèle s'il est présent (sinon, transmettre la valeur "null"), puis mettre à jour l'activité pourDataUsageFragment
ou obtenir l'intent directement dans la méthodeonAttach
en utilisantgetActivity().getIntent()
Dans les deux cas, vous pouvez transmettre les informations nécessaires pour cette méthode, comme vous l'avez fait ci-dessus. - Identifiez toutes les autres dépendances ou actions d'intent attendues dans l'ancien fragment avant nettoyer les anciens fragments et fichiers XML. Dans ce cas, une superposition "config value" pointe vers l'ancienne activité, qui doit être mise à jour pour pointer vers la bonne activité.
Ajouter un écran de préférences à la hiérarchie
Pour ajouter un écran de préférences à la hiérarchie, consultez la section Ajouter des paramètres pour le véhicule.
Après avoir créé l'écran de préférences, utilisez les exemples ci-dessus pour réorganiser les de la hiérarchie des préférences.