ज़्यादातर मामलों में, सेटिंग के क्रम को फिर से व्यवस्थित करना आसान होता है. आम तौर पर, इसमें ज़रूरी प्राथमिकता और 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
को अपडेट किया गया है, ताकि कॉन्स्ट्रक्शन के बाद प्राथमिकता कंट्रोलर में जानकारी भेजने के लिए use
तरीका शामिल किया जा सके.
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
तरीका बनाएं और टेंप्लेट मौजूद होने पर उसे पास करें (अन्यथा, null पास करें). इसके बाद,DataUsageFragment
के लिए गतिविधि अपडेट करें याgetActivity().getIntent()
का इस्तेमाल करके,onAttach
तरीके में सीधे तौर पर इंटेंट की जानकारी पाएं. दोनों ही मामलों में, इस तरीके के लिए ज़रूरी जानकारी को वैसे ही पास किया जा सकता है जैसे आपने ऊपर किया था.- पुराने फ़्रैगमेंट और एक्सएमएल फ़ाइलों को हटाने से पहले, पुराने फ़्रैगमेंट में मौजूद किसी भी अन्य डिपेंडेंसी या इंटेंट ऐक्शन की पहचान करें. इस मामले में, ओवरले कॉन्फ़िगरेशन वैल्यू पुरानी गतिविधि पर ले जाती है. इसे सही गतिविधि पर ले जाने के लिए अपडेट करना ज़रूरी है.
हैरारकी में प्राथमिकता वाली स्क्रीन जोड़ना
हैरारकी में नई प्राथमिकता वाली स्क्रीन जोड़ने के लिए, कार की सेटिंग जोड़ना लेख पढ़ें.
प्राथमिकता की नई स्क्रीन बनाने के बाद, प्राथमिकता की हैरारकी को अपनी पसंद के मुताबिक फिर से व्यवस्थित करने के लिए, ऊपर दिए गए उदाहरणों का इस्तेमाल करें.