Ç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 verilebilir. Bu, etkinliğe yönelik amaçtan gelmelidir. (sağlandığında).Bu gerekli bilgileri almak için bir
newInstance
oluşturun yöntemini kullanın ve mevcut olduğunda şablonu iletin (aksi takdirde boş olarak iletin) 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ç işlemlerini tanımlayın temizlemeyi deneyin. Böyle durumlarda yer paylaşımı config değeri, eski etkinliği 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.