Pour l'essentiel, la réorganisation de la hiérarchie des paramètres est relativement simple et consiste généralement à déplacer la préférence appropriée et PreferenceController
vers un autre fichier XML. Si le PreferenceController
utilise use(...)
, assurez-vous de le supprimer du SettingsFragment
précédent et de l'ajouter au nouveau SettingsFragment
.
Cette page fournit des exemples de réorganisation des paramètres afin d'examiner les situations qui peuvent 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 lequel la préférence n'a qu'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 des préférences de la page d’accueil vers l’écran des préférences Système. Pour ce faire, déplacez le 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éplacer une préférence qui utilise use(...)
Prenons l'exemple plus complexe suivant qui déplace toutes les préférences du fragment Data Warning & Limit vers le haut d'un niveau dans le fragment Data Usage, qui met à jour DataWarningAndLimitFragment.java
pour inclure la méthode use
pour transmettre les informations aux contrôleurs de préférences après la construction.
- Déplacez le XML pertinent 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 comment la méthodeuse
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 stratégie réseau et le modèle réseau pour les contrôleurs de préférences. Étant donné que cet exemple déplace toutes les préférences et que tout le code de la méthodeonAttach
est pertinent pour définir ces paramètres de préférence, il serait approprié de copier l'intégralité du contenu de la méthode dans le nouveau fragment. Cependant, cela varie en fonction des préférences spécifiques. Vous devez également déplacer les variables d'instance pertinentes.Il existe cependant une complication. Le fragment d'origine s'attendait à ce que
NetworkPolicyManager.EXTRA_NETWORK_TEMPLATE
soit transmis en tant qu'argument, qui devrait provenir de l'intention de l'activité (lorsqu'il est fourni).Pour obtenir ces informations nécessaires, créez une méthode
newInstance
et transmettez le modèle lorsqu'il est présent (sinon, transmettez-le en null), puis mettez à jour l'activité pourDataUsageFragment
ou obtenez les informations d'intention 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 toute autre dépendance ou action d'intention attendue dans l'ancien fragment avant de nettoyer les anciens fragments et fichiers XML. Dans ce cas, une valeur de configuration de superposition pointe vers l’ancienne activité, qui doit être mise à jour pour pointer vers l’activité correcte.
Ajouter un écran de préférences à la hiérarchie
Pour ajouter un nouvel écran de préférences à la hiérarchie, voir Ajouter des paramètres de voiture .
Après avoir créé le nouvel écran de préférences, utilisez les exemples ci-dessus pour réorganiser la hiérarchie des préférences comme vous le souhaitez.