2013-02-25 57 views
5

enter image description herePreferenceFragment काम करने के लिए नहीं मिल सकता है (संकलन त्रुटि)

मैं त्रुटि हो रही है जब मैं अपने प्रोजेक्ट को संकलित करने का प्रयास करें: "विधि प्रकार FragmentTransaction में जोड़ने (पूर्णांक, टुकड़ा) के लिए लागू नहीं है तर्क (int, FragmentPreferences) "। जहां तक ​​मुझे पता है, वरीयता फ्रेगमेंट एक टुकड़ा है? मैं एंड्रॉइड 4.0 के लिए विकसित कर रहा हूं लेकिन मुझे एंड्रॉइड-सपोर्ट-वी 4 लाइब्रेरी का उपयोग करना है क्योंकि मेरी परियोजना में व्यूपेगर भी शामिल है। मैं http://developer.android.com/guide/topics/ui/settings.html#Fragment पर इस उदाहरण पाया:

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

लेकिन मैं यह काम करने के लिए नहीं मिल सकता है।

मेरे कोड:

case R.id.menu_settings: 
    FragmentPreferences prefs = new FragmentPreferences(); 
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
    ft.add(android.R.id.content, prefs); 
    ft.commit(); 
    break; 

FragmentPreferences:

public class FragmentPreferences extends PreferenceFragment { 
    @Override 
    public void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.preferences); 
    } 

} 

उत्तर

16

ऐसा इसलिए है क्योंकि PreferenceFragmentandroid.support.v4.app.Fragment के बजाय android.app.Fragment बढ़ाता है, जो android.support.v4.app.FragmentTransaction अपेक्षा कर रहा है।

अभी तक, समर्थन लाइब्रेरी में PreferenceFragment का कोई आधिकारिक बैकपोर्ट नहीं है। हालांकि, आप इस अंतर को भरने के लिए UnifiedPreferences जैसे पुस्तकालयों का उपयोग कर सकते हैं।

1

चेक import अपने कोड के शीर्ष पर बयान। संभवतः आप जिन वर्गों का उपयोग कर रहे हैं उनमें से एक support से है जबकि दूसरा नहीं है।

+1

यदि मैं इनमें से किसी भी वर्ग को बदलता हूं तो यह मेरे व्यूअर को तोड़ देगा। – user1888162

+0

जैसा कि ianhanniballake ऊपर सुझाया गया है, आपको विकल्पों की तलाश करनी होगी। अगर आपको वास्तव में टुकड़ों की आवश्यकता नहीं है तो मैं बस 'वरीयता सक्रियता' का उपयोग करने का सहारा लेगा। –

0

समर्थन लाइब्रेरी में वरीयता फ़्रेगमेंट का अनौपचारिक बैकपोर्ट यहां दिया गया है। अंतिम अपडेट फ़रवरी 2015 & था यह लॉलीपॉप उपकरणों के साथ संगत है। android-support-v4-preferencefragment

import android.support.v4.preference.PreferenceFragment; 
+0

मेरे दृष्टिकोण में, खराब समाधान! – Mateus

+0

यह बताने की देखभाल करता है कि यह एक बुरा समाधान क्यों है? –

+0

वह समाधान जो मैंने लंबे समय से खोजा है। –

-1

बस एक त्वरित अद्यतन:

compile "com.android.support:preference-v7:$supportVersion" 

मज़ा: वहाँ अब समर्थन Librray में पसंद कर रहे हैं।