Çoğu durumda, Ayarlar hiyerarşisinin yeniden düzenlenmesi
basittir ve genellikle ilgili tercihin
PreferenceController
öğesini farklı bir XML dosyasına yükleyin. Öğe
PreferenceController
, use(...)
kullanıyor, kaldırdığınızdan emin olun
bunu önceki SettingsFragment
tarih aralığından alıp yeni
SettingsFragment
.
Bu sayfada, meydana gelebilir.
Temel tercihi taşıma
Bu örnekte, bir tercihin bir tercih ekranından diğerine nasıl taşınacağı açıklanmaktadır.
Burada tercihin yalnızca varsayılan bir tercih denetleyicisi vardır. Bu örnekte
Ana sayfa tercihi ekranından Sistem tercihi seçeneğine Birim tercihi taşıyın
tıklayın. Bunu yapmak için aşağıdaki XML dosyasını homepage_fragment.xml
konumundan
system_settings_fragment.xml
içinde uygun konum:
<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şı
Tüm tercihlerin yer aldığı daha karmaşık bir örneği inceleyin.
Veri Uyarısı ve Parçayı bir seviye yukarıya taşıyacak şekilde Veri Kullanımı parçasıyla sınırlayın.
DataWarningAndLimitFragment.java
, use
yöntemini içerecek şekilde güncellenir
kurulumdan sonra tercihli denetleyicilere bilgi iletmek için kullanılır.
- Alakalı XML'i
data_usage_fragment.xml
içinde istediğiniz 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
içinde,use
öğesinin yöntemi kullanılır.@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 ağ politikası düzenleyicisini ayarlar ağ şablonu kullanır. Bu örnek, tüm öğelerionAttach
yöntemindeki tercihler ve tüm kodlar, bu tercih parametrelerini ayarladığınızda, tüm parametreleri yöntem içeriklerini yeni parçaya taşımanızı sağlar. Ancak bu, reklamverenin özel bir tercihtir. Ayrıca, ilgili örnek değişkenlerini taşımanız gerekir.Ancak bir komplikasyon var. Orijinal parça bekleniyor
NetworkPolicyManager.EXTRA_NETWORK_TEMPLATE
olacak argüman olarak iletilir. Bu, etkinliğe yönelik amaçtan gelmelidir. (sağlandığında).Bu gerekli bilgileri almak için bir
newInstance
oluşturun yöntemini kullanabilir ve mevcut olduğunda şablondan aktarabilirsiniz (aksi takdirde, null olarak iletebilirsiniz) ve ardındanDataUsageFragment
için etkinliği güncelleyin veya amacı alın yöntemini kullanarak bilgileri doğrudanonAttach
getActivity().getIntent()
. Her iki durumda da, bu yöntemle ilgili olarak gereken tüm bilgileri alabilir.- Öncesinde eski parçadaki diğer bağımlılıkları ya da beklenen amaç eylemlerini tanımlayın temizlemeyi deneyin. Böyle durumlarda yer paylaşımı config değeri, eski etkinliğe işaret eder. Bu işlemin, size yardımcı olabilir.
Hiyerarşiye tercih ekranı ekleme
Hiyerarşiye yeni bir tercih ekranı eklemek için Araç Ayarları Ekleme bölümüne bakın.
Yeni tercih ekranını oluşturduktan sonra, seçenekleri yeniden düzenlemek için yukarıdaki örnekleri kullanın. gerektiği gibi uyarlayabilirsiniz.