Araç Ayarlarını Yeniden Düzenleyin

Ç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.

  1. İ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>
    
  2. 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 ve onAttach 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ından DataUsageFragment için aktiviteyi güncelleyin ya da getActivity().getIntent() kullanarak amaç bilgisini doğrudan onAttach yönteminden alın. getActivity().getIntent() . Her iki durumda da yukarıda yaptığınız gibi bu yöntem için gerekli bilgileri iletebilirsiniz.

  3. 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.