Die Neuanordnung der Einstellungshierarchie ist größtenteils relativ
und besteht in der Regel darin, die relevanten Präferenzen
PreferenceController
in eine andere XML-Datei um. Wenn die
PreferenceController
verwendet use(...)
, entfernen Sie
aus dem vorherigen SettingsFragment
und fügen sie dem neuen
SettingsFragment
Auf dieser Seite finden Sie Beispiele für die Neuanordnung von Einstellungen, um Situationen zu identifizieren, auftreten können.
Grundlegende Einstellung verschieben
In diesem Beispiel wird erläutert, wie Sie eine Einstellung von einem Bildschirm mit Einstellungen auf einen anderen verschieben.
in denen die Einstellung nur einen Standard-Controller hat. In diesem Beispiel
Verschieben Sie die Einheiteneinstellungen vom Bildschirm mit den Einstellungen für die Startseite in die Systemeinstellungen.
Bildschirm. Verschieben Sie dazu den folgenden XML-Code aus homepage_fragment.xml
in den
Entsprechender Ort in 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>
Eine Einstellung verschieben, für die Folgendes verwendet wird:
Betrachten Sie das folgende komplexere Beispiel, bei dem alle Einstellungen
im Abschnitt „Datenwarnung“ und Beschränken Sie das Fragment auf eine Ebene auf das Fragment für die Datennutzung, das
aktualisiert DataWarningAndLimitFragment.java
, um die Methode use
einzuschließen
um nach der Konstruktion Informationen an die bevorzugten Controller zu übergeben.
- Verschiebe die entsprechende XML-Datei an den gewünschten Speicherort in
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>
- Bestimmen Sie in
DataWarningAndLimitFragment.java
, wie dieuse
verwendet wird.@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); } }
In diesem Fall wird mit der Methode
use
der Editor für Netzwerkrichtlinien festgelegt. und Netzwerkvorlage für die bevorzugten Controller. Da in diesem Beispiel alle der Einstellungen und der gesamte Code in der MethodeonAttach
ist relevant für wenn Sie diese Einstellungsparameter festlegen, in das neue Fragment ein. Dies hängt jedoch davon ab, bestimmte Präferenz. Außerdem müssen Sie die relevanten Instanzvariablen verschieben.Es gibt jedoch eine Komplikation. Das erwartete ursprüngliche Fragment
NetworkPolicyManager.EXTRA_NETWORK_TEMPLATE
wird als Argument übergeben, das vom Intent an die Aktivität übergeben werden sollte. (sofern angegeben).Erstellen Sie entweder ein
newInstance
-Objekt, um diese erforderlichen Informationen zu erhalten. übergeben und, sofern vorhanden, die Vorlage übergeben (andernfalls null) und dann die Aktivität fürDataUsageFragment
aktualisieren oder den Intent abrufen Informationen direkt in deronAttach
-Methode mithilfe dergetActivity().getIntent()
. In beiden Fällen können Sie das Feld Informationen für diese Methode benötigen, wie Sie es oben getan haben. - Identifizieren Sie alle anderen Abhängigkeiten oder erwarteten Intent-Aktionen im alten Fragment, bevor Bereinigen der alten Fragmente und XML-Dateien. In diesem Fall ein Overlay config-Wert auf die alte Aktivität, die aktualisiert werden muss, damit sie auf die richtige Aktivität zu finden.
Bildschirm mit Einstellungen zur Hierarchie hinzufügen
Informationen dazu, wie Sie der Hierarchie einen neuen Einstellungsbildschirm hinzufügen, finden Sie unter Autoeinstellungen hinzufügen.
Nachdem Sie die neue Einstellung erstellt haben, ordnen Sie die bevorzugte Hierarchie.