2012-06-07 14 views
39

का उपयोग कर प्राथमिकता स्क्रीन ActionBarSherlock का उपयोग कर एक एंड्रॉइड एप्लिकेशन कर रहा हूं। मेरी समस्या वरीयता स्क्रीन बनाने के लिए है। onBuildHeader()SherlockPreferenceActivity कक्षा पर विधि को नेवर कहा जाता है।एक्शनबार शेरलॉक

यह मेरा कोड

preference_headers.xml है

<preference-headers xmlns:android="http://schemas.android.com/apk/res/android" > 
<header 
    android:fragment="package.fragments.MyPreferenceFragment" 
    android:icon="@drawable/bulle" 
    android:summary="An example of some preferences." 
    android:title="title" /> 

</preference-headers> 

preferences.xml

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" 
    android:title="@string/options" > 

    <PreferenceCategory> 
     <SwitchPreference 
      android:id="@+id/cb_notif" 
      android:defaultValue="false" 
      android:key="com.vincent.HTC_Dev.pref.notif" 
      android:summaryOff="@string/notifications_off" 
      android:summaryOn="@string/notifications_on" 
      android:title="@string/notifications" /> 
    </PreferenceCategory> 

</PreferenceScreen> 

MyPreferenceActivity

public class MyPreferenceActivity extends SherlockPreferenceActivity { 


    @Override 
    public void onBuildHeaders(List<Header> target) { 
     super.onBuildHeaders(target); 

     loadHeadersFromResource(R.xml.preference_headers, target); 
    } 

} 

MyPreferenceFragment

public class MyPreferenceFragment extends PreferenceFragment implements OnSharedPreferenceChangeListener { 

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

     addPreferencesFromResource(R.xml.preferences); 
     getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this); 
    } 

    @Override 
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, 
      String key) { 
     // TODO Auto-generated method stub 

    } 


} 
+27

'ऑनबिल्डहेडर()' केवल तभी बुलाया जाएगा यदि आप एपीआई स्तर 11 या उच्चतर पर चल रहे हैं। एपीआई लेवल 11+ पर 'वरीयता फ्रेगमेंट' और एंड्रॉइड के पुराने संस्करणों पर क्लासिक वरीयताओं का समर्थन करने के उदाहरण के लिए https://github.com/commonsguy/cw-omnibus/tree/master/Prefs/FragmentsBC देखें। – CommonsWare

+0

ठीक है बहुत बहुत धन्यवाद! –

+11

@ कॉमन्सवेयर क्या आप अपनी टिप्पणी को एक answrt के रूप में बदल सकते हैं, क्योंकि यह सबसे ज्यादा वोट दिया गया "अनुत्तरित" प्रश्न – rds

उत्तर

3

onBuildHeaders() केवल यदि आप एपीआई स्तर 11 या उसके बाद पर चल रहे हैं बुलाया जाएगा। API स्तर 11+ पर वरीयता फ़्रेगमेंट का समर्थन करने और एंड्रॉइड के पुराने संस्करणों पर क्लासिक वरीयताओं के समर्थन के उदाहरण के लिए github.com/commonsguy/cw-omnibus/tree/master/Prefs/FragmentsBC देखें।
- CommonsWare जून 7 '12 पर 11:06

@CommonsWare आप इस के रूप में आप का जवाब पोस्ट करें कर सकते हैं, तो मैं अपने जवाब की इस प्रति हटा सकते हैं।

10

onBuildHeaders() केवल तभी कॉल किया जाएगा यदि आप API स्तर 11 या उच्चतर पर चल रहे हैं। पुराने उपकरणों पर, आप क्लासिक addPreferencesFromResource() दृष्टिकोण पर वापस आ गए हैं।

एपीआई स्तर 11+ पर PreferenceFragment और एंड्रॉइड के पुराने संस्करणों पर क्लासिक प्राथमिकताओं का समर्थन करने के उदाहरण के लिए this sample project देखें।

विशेष रूप से, अपने SherlockFragmentActivity लगता है:

package com.commonsware.android.preffragsbc; 

import java.util.List; 
import android.os.Build; 
import android.os.Bundle; 
import com.actionbarsherlock.app.SherlockPreferenceActivity; 

public class EditPreferences extends SherlockPreferenceActivity { 
    @SuppressWarnings("deprecation") 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    if (Build.VERSION.SDK_INT<Build.VERSION_CODES.HONEYCOMB) { 
     addPreferencesFromResource(R.xml.preferences); 
     addPreferencesFromResource(R.xml.preferences2); 
    } 
    } 

    @Override 
    public void onBuildHeaders(List<Header> target) { 
    loadHeadersFromResource(R.xml.preference_headers, target); 
    } 
} 

onCreate() हम को केवलaddPreferencesFromResource() अगर हम एक पुराने डिवाइस पर रहे हैं की जरूरत है। इस मामले में, मेरे नमूने में दो वरीयता शीर्षलेख हैं, और इसलिए दो वरीयता एक्सएमएल फाइलें हैं, इसलिए हम दोनों पर addPreferencesFromResource() पर कॉल करते हैं। नए उपकरणों पर, onCreate() सुपरक्लास के लिए श्रृंखला के अलावा कुछ भी नहीं करता है, जो कॉल को onBuildHeaders() पर ट्रिगर करेगा।

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