Çoğunlukla, Ayarlar hiyerarşisini yeniden düzenlemek nispeten basittir ve genellikle ilgili tercihin ve PreferenceController
farklı bir XML dosyasına taşınmasından oluşur. PreferenceController
use(...)
kullanıyorsa, onu önceki SettingsFragment
kaldırdığınızdan ve yeni SettingsFragment
eklediğinizden emin olun.
Bu sayfada, oluşabilecek durumları gözden geçirmek amacıyla Ayarların yeniden düzenlenmesine ilişkin örnekler verilmektedir.
Temel tercihi taşıma
Bu örnek, bir tercihin yalnızca varsayılan bir tercih denetleyicisine sahip olduğu bir tercih ekranından diğerine nasıl taşınacağını açıklamaktadır. Bu örnekte Birimler tercihini Ana Sayfa tercih ekranından Sistem tercih ekranına taşırsınız. Bunu yapmak için aşağıdaki XML'i homepage_fragment.xml
dosyasından system_settings_fragment.xml
dosyasındaki uygun konuma taşıyın:
<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(...) kullanan bir tercihi taşıyın
Veri Uyarısı ve Sınırı parçasındaki tüm tercihleri bir düzey yukarıya, DataWarningAndLimitFragment.java
oluşturma sonrasında tercih denetleyicilerine bilgi aktarmak için use
yöntemini içerecek şekilde güncelleyen Veri Kullanımı parçasına taşıyan aşağıdaki daha karmaşık örneği düşünün.
- İlgili XML'i
data_usage_fragment.xml
istenen konuma taşıyın:<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
yönteminin nasıl kullanıldığını belirleyin.@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); } }
Bu durumda
use
yöntemi, tercih denetleyicileri için ağ ilkesi düzenleyicisini ve ağ şablonunu ayarlar. Bu örnek tüm tercihleri taşıdığından veonAttach
yöntemindeki tüm kodlar bu tercih parametrelerinin ayarlanmasıyla ilgili olduğundan, yöntem içeriğinin tamamının yeni parçaya kopyalanması uygun olacaktır. Ancak bu, spesifik tercihe bağlı olarak değişir. İlgili örnek değişkenlerinin üzerine de gitmeniz gerekir.Ancak bir komplikasyon var. Orijinal parça,
NetworkPolicyManager.EXTRA_NETWORK_TEMPLATE
öğesinin amaçtan etkinliğe (sağlandığında) gelmesi gereken bir bağımsız değişken olarak iletilmesini bekliyordu.Bu gerekli bilgiyi elde etmek için, ya bir
newInstance
yöntemi oluşturun ve mevcut olduğunda şablona iletin (aksi takdirde null olarak iletin) ve ardındanDataUsageFragment
için aktiviteyi güncelleyin ya dagetActivity().getIntent()
kullanarak amaç bilgisini doğrudanonAttach
yönteminden alın.getActivity().getIntent()
. Her iki durumda da yukarıda yaptığınız gibi bu yöntem için gerekli bilgileri iletebilirsiniz. - Eski parçaları ve XML dosyalarını temizlemeden önce, eski parçadaki diğer bağımlılıkları veya beklenen amaç eylemlerini tanımlayın. Bu durumda, bir katman yapılandırma değeri , doğru aktiviteyi işaret edecek şekilde güncellenmesi gereken eski aktiviteye işaret eder.
Hiyerarşiye bir tercih ekranı ekleme
Hiyerarşiye yeni bir tercih ekranı eklemek için bkz. Araç Ayarları Ekle .
Yeni tercih ekranını oluşturduktan sonra tercih hiyerarşisini istediğiniz gibi yeniden düzenlemek için yukarıdaki örnekleri kullanın.