重新排列車輛設定

在大多數情況下,重新排列設定階層的做法相當簡單,通常只需將相關偏好設定和 PreferenceController 移至其他 XML 檔案即可。如果 PreferenceController 使用 use(...),請務必從先前的 SettingsFragment 中移除,並新增至新的 SettingsFragment

本頁面提供重新排序設定的範例,讓您查看可能發生的情況。

移動基本偏好設定

本範例說明如何將偏好設定從一個偏好設定畫面移至另一個畫面,其中偏好設定只有預設偏好設定控制器。在本範例中,您會將「單位」偏好設定從「首頁」偏好設定畫面移至「系統」偏好設定畫面。如要這樣做,請將下列 XML 從 homepage_fragment.xml 移至 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>

移動使用 use(...) 的偏好設定

請考慮下列較複雜的範例,該範例會將「Data Warning & Limit」片段中的所有偏好設定向上一層移動至「Data Usage」片段,並更新 DataWarningAndLimitFragment.java 以納入 use 方法,以便在建構後將資訊傳遞至偏好設定控制器。

  1. 將相關 XML 移至 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. DataWarningAndLimitFragment.java 中,決定 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);
        }
    }

    在本例中,use 方法會為偏好設定控制器設定網路政策編輯器和網路範本。由於這個範例會移動所有偏好設定,且 onAttach 方法中的所有程式碼都與設定這些偏好設定參數相關,因此建議將整個方法內容複製到新片段中。不過,這會因特定偏好設定而異。您也必須移轉相關的例項變數。

    不過,這項功能有一個缺點。原始片段預期 NetworkPolicyManager.EXTRA_NETWORK_TEMPLATE 會以引數的形式傳入,該引數應來自意圖 (如果提供) 到活動。

    如要取得這項必要資訊,請建立 newInstance 方法,並在有範本時傳入 (否則傳入空值),然後更新 DataUsageFragment 的活動,或是使用 getActivity().getIntent()onAttach 方法中直接取得意圖資訊。無論是哪種情況,您都可以像上述方法一樣,傳入此方法所需的資訊。

  3. 請先找出舊片段中的其他依附元件或預期的意圖動作,再清理舊片段和 XML 檔案。在這種情況下,疊加層設定值會指向舊活動,而您必須更新該值,讓其指向正確的活動。

在階層中新增偏好設定畫面

如要在階層中新增偏好設定畫面,請參閱「新增車輛設定」。

建立新的偏好設定畫面後,請參考上述範例,依照需求重新排列偏好設定階層。