2012-07-08 12 views
50

मैं ऐसा कुछ करने की कोशिश कर रहा हूं जो मुझे लगता है कि काफी आसान है, लेकिन मैं वरीयता एक्टिविटी क्लास और एक्सएमएल वरीयता-हेडर टैग का उपयोग करके इसे पूरा करने के तरीके से परेशान हूं।एकल पृष्ठ वरीयता सक्रियता w/ना शीर्षलेख/टुकड़े?

जब उपयोगकर्ता ऐप सेटिंग्स आइकन टैप करता है तो मैं उन्हें चेकबॉक्स और सूचियों की एक छोटी सूची के साथ प्रस्तुत करना चाहता हूं। मेरे पास केवल एक वरीयता खंड है। वरीयता खंड के लिए एकल हेडर दिखाने के लिए अब तक मैं वरीयता एक्टिविटी एक्सएमएल फाइल (प्राथमिकताएं। एक्सएमएल, और वरीयता खंड xmls) सेट कर सकता हूं। जब उपयोगकर्ता उस शीर्षलेख का चयन करता है तो प्राथमिकता स्क्रीन बिल्कुल ठीक है, मैं इसे कैसे चाहता हूं, हालांकि, मैं पहली हेडर स्क्रीन दिखाने को छोड़ने का कोई तरीका नहीं समझ सकता।

यह एक बेकार, सेटिंग/प्राथमिकताओं आइकन टैप करने के लिए है एक भी शीर्ष लेख है कि तब वास्तविक सेटिंग/प्राथमिकताओं को पाने के लिए उपयोग किया जाता है को दिखाने के लिए लगता है।

मैं समझता हूँ कि यदि आप अपनी प्राथमिकताओं का श्रेणीकरण करना चाहते कैसे इस बहुत उपयोगी हो सकता है, लेकिन कुछ सरल के लिए, इस भूमि के ऊपर कहते हैं और नहीं बल्कि भद्दा लगता है।

मुझे उम्मीद है कि मैं स्पष्ट था।

PreferenceActivity वर्ग और वरीयता हेडर टैग का उपयोग करने के लिए बस नहीं हेडर के साथ विकल्पों में से एक ही स्क्रीन को दिखाने के लिए नया पसंदीदा तरीका क्या है: यहाँ संक्षेप में मेरे सवाल है?

कुछ और देखने के बाद ऐसा लगता है कि मैं ऐसा करने की कोशिश कर रहा हूं जो पुराने तरीके से सीधे तरीके से किया गया था। मैं किसी भी बहिष्कृत कार्यों का उपयोग किए बिना ऐसा करने की कोशिश कर रहा हूं।

अग्रिम धन्यवाद, बी

+1

मुझे एक समान आवश्यकता थी। इस समाधान का उपयोग करके समाप्त हुआ https://stackoverflow.com/a/10960720/276263 – krishnakumarp

उत्तर

22

मैं एक जवाब है कि इस सवाल का मिलान किया लिए देख रहा था। आखिरकार, मैंने इसे कई अन्य स्रोतों से बाहर किया। उन लोगों के लिए जो अभी भी इसका उत्तर दे सकते हैं, यहां मेरे लिए क्या काम किया गया है। (नोट - इस परियोजना में न्यूनतम और लक्ष्य एसडीके 15 पर सेट किए गए हैं।)

  1. वरीयताओं को डंप करें, आपको उनकी आवश्यकता नहीं होगी।
  2. एकल पृष्ठ सेटिंग्स के साथ वरीयता स्क्रीन बनाएं।
  3. वरीयता गतिविधि कक्षा (नीचे सेटिंग्स सक्रियता) बनाएं।
  4. वरीयता फ़्रेगमेंट (नीचे स्थानफ्रैगमेंट) का विस्तार करने वाली एक इनलाइन कक्षा बनाएं।
  5. मैनिफेस्ट में कक्षा को परिभाषित करें।
  6. कार्य शुरू करें - नीचे दिए गए मेनू कोड को देखें।

वरीयता वर्ग है कि एकल सेटिंग्स स्क्रीन दिखाता है।

public class SettingsActivity extends PreferenceActivity { 

    private final static String TAG = "SettingsAcitivity"; 

    public SettingsActivity() {} 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     MyLog.d(TAG, "onCreate"); 
     getFragmentManager().beginTransaction() 
       .replace(android.R.id.content, new LocationFragment()).commit(); 
    } 

    public class LocationFragment extends PreferenceFragment { 

     private final static String TAG = "LocationFragment"; 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      MyLog.d(TAG, "onCreate"); 
      addPreferencesFromResource(R.xml.locationsettings); 
     } 
    } 
} 

कोड सेटिंग्स प्रदर्शित करने के लिए:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    MyLog.d(TAG, "onOptionsItemSelected"); 
    switch (item.getItemId()) { 
    case R.id.menu_main_help: 
     break; 
    case R.id.menu_main_about: 
     break; 
    case R.id.menu_main_settings: 
     MyLog.d(TAG, "Settings"); 
     Intent settingsIntent = new Intent(this, SettingsActivity.class); 
     startActivity(settingsIntent); 
     break; 
    } 
    return true; 
} 

वापस कुंजी SettingsActivity समाप्त हो जाता है। अंतर्निहित प्राथमिकता दिनचर्या किसी भी बदलाव को बचाती है। ऑनर्यूसम फ़ंक्शन में मेरे पास getSettings() है जो कॉलिंग गतिविधि (इस मामले में मुख्य क्रियाशीलता) द्वारा उपयोग की जाने वाली किसी भी बदली गई सेटिंग्स को अपडेट करता है।

यही है।

+0

और यदि आप अभी भी अपने Fragmant के शीर्ष पर पुराने शीर्षलेख देख रहे हैं, तो सुनिश्चित करें कि आप 'onBuildHeaders()' विधि को हटा दें। – iTurki

77

किसी भी गतिविधि की मुख्य सामग्री के रूप में एकल PreferenceFragment को दिखाने का नया पसंदीदा तरीका है।इसे PreferenceActivity होने की आवश्यकता नहीं है। एपीआई डेमो नमूना

public class FragmentPreferences extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     // Display the fragment as the main content. 
     getFragmentManager().beginTransaction().replace(android.R.id.content, 
       new PrefsFragment()).commit(); 
    } 


    public static class PrefsFragment extends PreferenceFragment { 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 

      // Load the preferences from an XML resource 
      addPreferencesFromResource(R.xml.preferences); 
     } 
    } 

} 
+0

यह एपीआई 11 में प्राप्त नहीं होने वाली getFragmentManager() विधि की वजह से कम API 11 पर काम नहीं करेगा ... –

+0

getFragmentManager() को समर्थन लाइब्रेरी का उपयोग करने पर कॉल किया जा सकता है। – TheIT

+0

yup! अच्छा समाधान .. मुझे एहसास नहीं हुआ कि वरीयता फ्रेगमेंट का इस्तेमाल प्राथमिकता में घोंसला किए बिना भी किया जा सकता है! ;) –

संबंधित मुद्दे