W większości przypadków zmiana kolejności ustawień
jest zazwyczaj proste i polega zwykle na przeniesieniu odpowiednich preferencji
PreferenceController
do innego pliku XML. Jeśli
PreferenceController
używa use(...)
– usuń
z poprzedniego pliku SettingsFragment
i dodaj go do nowego
SettingsFragment
Na tej stronie znajdziesz przykłady zmiany kolejności Ustawień, dzięki którym sprawdzisz, może wystąpić.
Przenoszenie preferencji podstawowych
Ten przykład wyjaśnia, jak przenieść ustawienie z jednego ekranu preferencji na drugi.
które ma tylko domyślny kontroler preferencji. W tym przykładzie
przenieś preferencję jednostek z ekranu preferencji na stronie głównej do preferencji systemowych.
ekranu. Aby to zrobić, przenieś następujący kod XML z sekcji homepage_fragment.xml
do
odpowiednia lokalizacja w 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>
Przenieś preferencję, w której używane jest użycie(...)
Rozważmy bardziej złożony przykład, który przenosi wszystkie preferencje
w ostrzeżeniu dotyczącym danych i Ogranicz fragment kodu o jeden poziom do fragmentu Użycie danych, który
aktualizuje pole DataWarningAndLimitFragment.java
, aby uwzględnić metodę use
przekazywania informacji do kontrolerów preferencji po utworzeniu.
- Przenieś odpowiedni plik XML do wybranej lokalizacji w
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>
- Określ w narzędziu
DataWarningAndLimitFragment.java
, jakuse
.@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); } }
W tym przypadku metoda
use
ustawia edytor zasad sieciowych i szablonu sieci dla kontrolerów preferencji. Ten przykład przenosi preferencje i cały kod w metodzieonAttach
mają znaczenie dla tych parametrów preferencji, warto skopiować całą do nowego fragmentu. Zależy to jednak od do określonych preferencji. Musisz też przenieść odpowiednie zmienne instancji.To jednak nie wszystko. Oczekiwany jest oryginalny fragment
NetworkPolicyManager.EXTRA_NETWORK_TEMPLATE
, aby być przekazywane jako argument, który powinien pochodzić z intencji do działania (jeśli został podany).Aby uzyskać te potrzebne informacje, utwórz
newInstance
i przekazuj szablon, jeśli jest obecny (w przeciwnym razie przekazywać wartość null), a następnie zaktualizuj aktywność dla:DataUsageFragment
lub pobierz intencję informacji bezpośrednio w metodzieonAttach
za pomocą funkcjigetActivity().getIntent()
W obu przypadkach możesz przesłać w przypadku tej metody, tak jak powyżej. - Określ wszelkie inne zależności lub oczekiwane działania intencji w starym fragmencie przed czyścić stare fragmenty i pliki XML. W tym przypadku nakładka config value wskazuje starą aktywność, którą należy zaktualizować, tak aby wskazywała właściwą aktywność.
Dodaj ekran preferencji do hierarchii
Aby dodać nowy ekran preferencji do hierarchii, zobacz Dodawanie ustawień samochodu.
Po utworzeniu nowego ekranu ustawień skorzystaj z powyższych przykładów, aby zmienić kolejność zgodnie z potrzebami.