PreferenceFragment
2.2 और 2.3 (केवल API स्तर 11 और ऊपर) पर काम नहीं करेगा। यदि आप सबसे अच्छे उपयोगकर्ता अनुभव की पेशकश करना चाहते हैं और अभी भी पुराने एंड्रॉइड संस्करणों का समर्थन करना चाहते हैं, तो यहां पर सबसे अच्छा अभ्यास दो PreferenceActivity
कक्षाओं को लागू करने और रनटाइम पर निर्णय लेने के लिए प्रतीत होता है। हालांकि, इस विधि में अभी भी बहिष्कृत एपीआई को कॉल करना शामिल है, लेकिन आप इससे बच नहीं सकते हैं।
तो उदाहरण के लिए, आप एक preference_headers.xml
:
<preference-headers xmlns:android="http://schemas.android.com/apk/res/android" >
<header android:fragment="your.package.PrefsFragment"
android:title="...">
<extra android:name="resource" android:value="preferences" />
</header>
</preference-headers>
और एक मानक preferences.xml
(जो ज्यादा निम्नतर API स्तरों के बाद से नहीं बदला है):
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" android:title="...">
...
</PreferenceScreen>
तो फिर तुम के एक कार्यान्वयन की जरूरत है PreferenceFragment
:
public static class PrefsFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
}
}
और अंत में, आपको टी की आवश्यकता है PreferenceActivity
की wo कार्यान्वयन, API स्तरों का समर्थन या PreferenceFragments
समर्थन नहीं करने के लिए:
public class PreferencesActivity extends PreferenceActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
addPreferencesFromResource(R.xml.other);
}
}
और:
public class OtherPreferencesActivity extends PreferenceActivity {
@Override
public void onBuildHeaders(List<Header> target) {
loadHeadersFromResource(R.xml.preference_headers, target);
}
}
बिंदु पर जहां उपयोगकर्ता को वरीयता स्क्रीन प्रदर्शित करना चाहते हैं, तो आप तय जो करने के लिए एक शुरू:
if (Build.VERSION.SDK_INT < 11) {
startActivity(new Intent(this, PreferencesActivity.class));
} else {
startActivity(new Intent(this, OtherPreferencesActivity.class));
}
तो मूल रूप से, आप टुकड़ा प्रति एक xml फ़ाइल है, तो आप मैन्युअल रूप API स्तरोंके लिए इन xml फ़ाइलें के प्रत्येक लोड11, और दोनों गतिविधियां समान वरीयताओं का उपयोग करती हैं।
नहीं पसंद है, लेकिन गूगल डेवलपर की साइट में पूर्व हनीकोम्ब उपकरणों के साथ संगतता के मुद्दों के बारे में उपयोगी जानकारी देने के लिए शुरू किया: http://developer.android.com/training/backward-compatible-ui /index.html –
वरीयता फ़्रेगमेंट के लिए एक तृतीय पक्ष बैकपोर्ट है। [मेरा जवाब] देखें (http://stackoverflow.com/a/22462743/1747491)। – theblang
जैसा कि @pcans ने नीचे टिप्पणी की है, जवाब अब आधिकारिक एंड्रॉइड प्रलेखन में है: http://developer.android.com/guide/topics/ui/settings.html#BackCompatHeaders –