Zmień kolejność ustawień samochodu

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.

  1. 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>
    
  2. Określ w narzędziu DataWarningAndLimitFragment.java, jak use .
    @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 wszystkie ustawienia i cały kod w metodzie onAttach mają zastosowanie do 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 metodzie onAttach za pomocą funkcji getActivity().getIntent() W obu przypadkach możesz przesłać w przypadku tej metody, tak jak powyżej.

  3. 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.