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