대부분의 경우 설정 계층 구조 재정렬은 비교적 간단한 작업이며 일반적으로 관련 환경설정과 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(...)
를 사용하는 환경설정 이동
다음은 데이터 경고 및 제한 프래그먼트의 모든 환경설정을 한 레벨 위인 데이터 사용량 프래그먼트로 이동하는 좀 더 복잡한 예를 살펴보겠습니다. 데이터 사용량 프래그먼트는 use
메서드를 포함하도록 DataWarningAndLimitFragment.java
를 업데이트하여 생성 후 환경설정 컨트롤러에 정보를 전달합니다.
- 관련 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
메서드에서 직접 인텐트 정보를 가져옵니다. 어느 경우든 위에서 실행한 것처럼 이 메서드에 필요한 정보를 전달할 수 있습니다.- 이전 프래그먼트와 XML 파일을 정리하기 전에 이전 프래그먼트에서 다른 종속 항목이나 예상되는 인텐트 작업을 식별합니다. 이 경우 오버레이 구성 값이 이전 활동을 가리키며 이전 활동은 올바른 활동을 가리키도록 업데이트해야 합니다.
계층 구조에 환경설정 화면 추가
계층 구조에 새 환경설정 화면을 추가하려면 자동차 설정 추가를 참고하세요.
새 환경설정 화면을 만든 후 위의 예를 사용하여 환경설정 계층 구조를 원하는 대로 재정렬합니다.