ज़्यादातर मामलों में, सेटिंग की हैरारकी को फिर से व्यवस्थित किया जाता है
यह विकल्प, मुख्य तौर पर आपके काम की प्राथमिकता को दिखाता है और
PreferenceController
को किसी दूसरी एक्सएमएल फ़ाइल में ट्रांसफ़र करें. अगर
PreferenceController
, use(...)
का इस्तेमाल करता है. इसे ज़रूर हटा दें
इसे पिछले SettingsFragment
से लेकर नए
SettingsFragment
.
यह पेज, सेटिंग को फिर से क्रम में लगाने के उदाहरण देता है. इससे, उन स्थितियों की समीक्षा की जा सकती है जिनमें भी ऐसा हो सकता है.
मूल प्राथमिकता को माइग्रेट करना
इस उदाहरण में, किसी प्राथमिकता को एक से दूसरी स्क्रीन पर ले जाने का तरीका बताया गया है.
जिसमें प्राथमिकता में सिर्फ़ डिफ़ॉल्ट प्राथमिकता कंट्रोलर होता है. इस उदाहरण में,
इकाइयों की प्राथमिकता को होम पेज की प्राथमिकता स्क्रीन से सिस्टम प्राथमिकता में ले जाएं
स्क्रीन. ऐसा करने के लिए, नीचे दिए गए एक्सएमएल को homepage_fragment.xml
से इसमें ले जाएं
system_settings_fragment.xml
में सही जगह:
<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
तरीका शामिल करने के लिए, DataWarningAndLimitFragment.java
को अपडेट करता है
बनाने के बाद जानकारी को प्राथमिकता नियंत्रकों में पास करने के लिए.
- काम के एक्सएमएल को
data_usage_fragment.xml
में अपनी पसंद की जगह पर ले जाएं:<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
का तरीका इस्तेमाल किया जाता है.@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); } }
इस मामले में,
use
तरीका, नेटवर्क नीति एडिटर सेट करता है और प्राथमिकता नियंत्रकों के लिए नेटवर्क टेंप्लेट. ऐसा इसलिए हुआ, क्योंकि इस उदाहरण में सेटिंग औरonAttach
तरीके में मौजूद सभी कोड, नहीं करना चाहिए, तो ट्रैकिंग पैरामीटर को पूरी तरह से कॉपी करना बेहतर होगा. तरीके की सामग्री को नए फ़्रैगमेंट में डाल दें. हालांकि, यह इस आधार पर अलग-अलग होता है कि विशिष्ट प्राथमिकता. आपको काम के इंस्टेंस वैरिएबल से भी आगे बढ़ना होगा.हालांकि, इसमें एक जटिलता है. मूल खंड अपेक्षित है बनने के लिए
NetworkPolicyManager.EXTRA_NETWORK_TEMPLATE
को एक तर्क के रूप में पास किया गया हो, जो गतिविधि के उद्देश्य से आनी चाहिए (जब उपलब्ध कराया गया हो).यह ज़रूरी जानकारी पाने के लिए,
newInstance
बनाएं तरीका और टेंप्लेट में मौजूद होने पर पास करें (अन्यथा शून्य में पास करें) और फिरDataUsageFragment
के लिए गतिविधि अपडेट करें या इंटेंट पाएं का उपयोग करके सीधेonAttach
विधि में जानकारीgetActivity().getIntent()
. दोनों ही मामले में, आपको इस तरीके के लिए जानकारी ज़रूरी है.- इससे पहले कि पुराने फ़्रैगमेंट में, किसी अन्य डिपेंडेंसी या अनुमानित इंटेंट ऐक्शन की पहचान करें पुराने फ़्रैगमेंट और एक्सएमएल फ़ाइलों को मिटा सकते हैं. इस मामले में, ओवरले कॉन्फ़िगरेशन वैल्यू पुरानी गतिविधि पर ले जाती है, जिसे अपडेट करके सही गतिविधि.
क्रम में प्राथमिकता वाली स्क्रीन जोड़ें
क्रम में नई प्राथमिकता वाली स्क्रीन जोड़ने के लिए, कार की सेटिंग जोड़ें देखें.
नई प्राथमिकता स्क्रीन बनाने के बाद, ऊपर दिए गए उदाहरणों का उपयोग करके, पसंद के क्रम को टारगेट करें.