Araba Ayarlarını Yeniden Düzenleme

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

  1. 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>
    
  2. 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 öğeleri onAttach 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ından DataUsageFragment için etkinliği güncelleyin veya amacı alın yöntemini kullanarak bilgileri doğrudan onAttach getActivity().getIntent(). Her iki durumda da, bu yöntemle ilgili olarak gereken tüm bilgileri alabilir.

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