2015-11-04 6 views
7

मैं एंड्रॉइड के लिए नया हूं और सीखने के लिए उदारिटी एंड्रॉइड डेवलपर कोर्स के बाद हूं। मैं अध्याय 3 पर हूं जहां वे आपके ऐप में सेटिंग्स जोड़ने के बारे में सिखाते हैं। मैंने एंड्रॉइड स्टूडियो से सेटिंग एक्टिविटी जोड़ा है। जब मैं सेटिंग्स मेनू पर क्लिक करता हूं, तो मेरा ऐप क्रैश हो जाता है। यह मेरा pref_general.xml फ़ाइलएंड्रॉइड में सेटिंग्स का उपयोग करते समय रनटाइम अपवाद (मैं उदारता एंड्रॉइड डेवलपर कोर्स का पालन कर रहा हूं)

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> 

<!-- NOTE: EditTextPreference accepts EditText attributes. --> 
<!-- NOTE: EditTextPreference's summary should be set to its value by the activity code. --> 
<EditTextPreference 
    android:key="@string/pref_location_key" 
    android:defaultValue="@string/pref_location_default" 
    android:maxLines="1" 
    android:inputType="text" 
    android:selectAllOnFocus="true" 
    android:singleLine="true" 
    android:title="@string/pref_location_label" /> 

मैं जब मैं सेटिंग मेनू पर क्लिक करें SettingActivity में इन परिवर्तनों

protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setupActionBar(); 
addPreferencesFromResource(R.xml.pref_general); 
bindPreferenceSummaryToValue(findPreference(getString(R.string.pref_location_key)));} 

मैं हो रही अपवाद अनुसरण कर रही हूं बना दिया है

Process: com.example.android.sunshine.app, PID: 10131 
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.android.sunshine.app/com.example.android.sunshine.app.SettingsActivity}: java.lang.RuntimeException: Modern two-pane PreferenceActivity requires use of a PreferenceFragment 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2339) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2413) 
at android.app.ActivityThread.access$800(ActivityThread.java:155) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1317) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:135) 
at android.app.ActivityThread.main(ActivityThread.java:5343) 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700) 

Caused by: java.lang.RuntimeException: Modern two-pane PreferenceActivity requires use of a PreferenceFragment 
at android.preference.PreferenceActivity.requirePreferenceManager(PreferenceActivity.java:1441) 
at android.preference.PreferenceActivity.addPreferencesFromResource(PreferenceActivity.java:1511) 
at com.example.android.sunshine.app.SettingsActivity.onCreate(SettingsActivity.java:124) 
at android.app.Activity.performCreate(Activity.java:6010) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1129) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2292) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2413)  
at android.app.ActivityThread.access$800(ActivityThread.java:155)  
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1317)  
at android.os.Handler.dispatchMessage(Handler.java:102)  
at android.os.Looper.loop(Looper.java:135)  
at android.app.ActivityThread.main(ActivityThread.java:5343)  
at java.lang.reflect.Method.invoke(Native Method)  
at java.lang.reflect.Method.invoke(Method.java:372)  
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)  
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700) 

कोई मदद? क्षमा करें अगर इसकी बहुत ही मूर्ख चीज

उत्तर

4

मैं इसे हल करने में सक्षम था।
मैं सेटिंग सेटिंग में अपने ऑनक्रेट को बदलने के बजाय अपनी सेटिंग एक्टिविटी के ऑनक्रेट को बदल रहा था जो सेटिंग एक्टिविटी की स्थिर निजी श्रेणी है।

+0

Cna आप इसके लिए कुछ उदाहरण का हिस्सा (मैं भी सीख रहा हूँ। किसी को भी विशेषज्ञ किसी भी गलती पाते हैं तो अगर तो कृपया मुझे बताएँ।)? –

0

@mayank अग्रवाल

वह मतलब है कि परिवर्तन वर्ग जो PreferenceFragment फैली में किया जाना है। यानी आपको या तो वरीयता फ्रेगमेंट का विस्तार करना होगा।

हालांकि कोड Developers site पर काफी स्पष्टीकरणपूर्ण है, लेकिन यहां मैंने इसका उल्लेख करने के लिए कुछ हिस्सा लिया है (कोड में टिप्पणियां डालकर)।

public class PreferenceWithHeaders extends PreferenceActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     ...   
    } 
      //static class extending PreferenceFragment 

    public static class Prefs1Fragment extends PreferenceFragment { 
     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 

      PreferenceManager.setDefaultValues(getActivity(), 
        R.xml.advanced_preferences, false); 

      // Here's where you've to load the preferences from an XML resource 
      addPreferencesFromResource(R.xml.fragmented_preferences); 
     } 
    } 


    private void private void bindPreferenceSummaryToValue(Preference preference) { 
     ... 
    } 
} 

यदि आपका ऐप एपीआई 10 या उससे कम का समर्थन करता है तो यह अनिवार्य है कि आप वरीयता गतिविधि का उपयोग करें। हालांकि आप नए एपीआई पर उस बहिष्कृत तरीके का भी उपयोग कर सकते हैं। शुरुआती लोगों के लिए यहां nice explanation in details है।

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