En su mayor parte, reorganizar la jerarquía de Configuración es relativamente
sencillo y, por lo general, consiste en trasladar las preferencias relevantes
PreferenceController
a un archivo en formato XML diferente. Si el botón
PreferenceController
usa use(...)
. Asegúrate de quitarlo.
desde la SettingsFragment
anterior y agregarla al nuevo
SettingsFragment
En esta página, se proporcionan ejemplos para cambiar el orden de las opciones de configuración y revisar situaciones que de que ocurra la evaluación.
Mover una preferencia básica
En este ejemplo, se explica cómo mover una preferencia de una pantalla de preferencias a otra,
en el que la preferencia tiene solo un controlador de preferencias predeterminado. En este ejemplo,
Mover la preferencia Unidades de la pantalla de preferencias de la página principal a Preferencias del sistema.
en la pantalla. Para ello, mueve el siguiente XML de homepage_fragment.xml
a la
ubicación adecuada en 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>
Mueve una preferencia que utilice use(...)
Considera el siguiente ejemplo más complejo que traslada todas las preferencias
en la advertencia de datos y Limita el fragmento un nivel más alto en el fragmento de Uso de datos, que
Actualiza DataWarningAndLimitFragment.java
para incluir el método use
.
para pasar información a los controladores de preferencias después de la construcción.
- Mueve el XML relevante a la ubicación deseada en
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>
- En
DataWarningAndLimitFragment.java
, determina cómouse
.@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); } }
En este caso, el método
use
establece el editor de políticas de red. y la plantilla de red para los controladores de preferencias. Como en este ejemplo se trasladan las preferencias y todo el código del métodoonAttach
es relevante para estos parámetros de preferencia, sería apropiado copiar los contenidos del método en el nuevo fragmento. Sin embargo, esto varía según el una preferencia específica. También debes mover las variables de instancia relevantes.Sin embargo, hay una complicación. El fragmento original esperaba
NetworkPolicyManager.EXTRA_NETWORK_TEMPLATE
: pasado como un argumento, que debe provenir del intent a la actividad (cuando se proporcionan).Para obtener esta información necesaria, crea un
newInstance
y pasa la plantilla cuando está presente (de lo contrario, pasa un valor nulo). actualizar la actividad delDataUsageFragment
o conseguir el intent directamente en el métodoonAttach
getActivity().getIntent()
En cualquier caso, puedes pasar el la información necesaria para este método, como lo hiciste anteriormente. - Identifica otras dependencias o acciones de intent esperadas en el fragmento anterior antes limpiar los fragmentos y los archivos XML antiguos. En este caso, una superposición config value apunta a la actividad anterior, que debe actualizarse para que apunte a la actividad correcta.
Cómo agregar una pantalla de preferencias a la jerarquía
Para agregar una nueva pantalla de preferencias a la jerarquía, consulta Cómo agregar la configuración del vehículo.
Después de crear la nueva pantalla de preferencias, utiliza los ejemplos anteriores para reorganizar la de preferencias según lo desees.