ほとんどの場合、設定階層の再配置は比較的簡単で、通常は関連する設定と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 フラグメント内のすべての設定を 1 レベル上の Data Use フラグメントに移動します。これにより、 DataWarningAndLimitFragment.java
が更新され、構築後に設定コントローラーに情報を渡すuse
メソッドが含まれます。
- 関連する 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>
-
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
メソッドを作成し、存在する場合はテンプレートを渡し (それ以外の場合は null を渡し)、DataUsageFragment
のアクティビティを更新するか、getActivity().getIntent()
を使用してonAttach
メソッドでインテント情報を直接取得します。getActivity().getIntent()
。どちらの場合も、上記と同様に、このメソッドに必要な情報を渡すことができます。 - 古いフラグメントと XML ファイルをクリーンアップする前に、古いフラグメント内の他の依存関係または予期されるインテント アクションを特定します。この場合、 オーバーレイ構成値は古いアクティビティを指すため、正しいアクティビティを指すように更新する必要があります。
設定画面を階層に追加する
新しい設定画面を階層に追加するには、 「 車の設定を追加する 」を参照してください。
新しい設定画面を作成した後、上記の例を使用して、必要に応じて設定階層を再配置します。