2015-11-04 10 views
7

Ich bin neu bei Android und nach dem Udacity Android Entwicklerkurs zu lernen. Ich bin in Kapitel 3, wo sie über das Hinzufügen der Einstellungen in Ihrer App unterrichten. Ich habe die SettingActivity von Android Studio hinzugefügt. Wenn ich auf das Einstellungsmenü klicke, stürzt meine App ab. Das ist mein pref_general.xml DateiRuntime Ausnahme bei der Verwendung der Einstellungen in Android (Ich bin der Udacity Android Developer Kurs gefolgt)

<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" /> 

ich diese Änderungen in SettingActivity gemacht haben

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

ich folgende Ausnahme bin immer, wenn ich das Einstellungsmenü klicken

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) 

Irgendwelche Hilfe? Entschuldigung, wenn es sehr naiv ist

Antwort

4

Ich konnte das lösen.
Ich habe die OnCreate von meiner SettingActivity geändert, anstatt meine OnCreate von SettingFragment, die statische private Klasse von SettingActivity ist, zu ändern.

+0

Cna Sie es einige Beispiele teilen? –

0

@mayank agrawal

Er meinte, dass die Änderungen in der Klasse zu tun, sind die PreferenceFragment erstreckt. d. h. Sie müssen PreferenceFragment entweder erweitern.

Obwohl der Code auf der Developers site ziemlich erklärend ist, habe ich hier einen Teil davon genommen, nur um zu erwähnen, was er meinte (indem er Kommentare in den Code setzt).

Wenn Ihre App API 10 oder niedrig unterstützt, müssen Sie die Vorzugsaktivität verwenden. Sie können diese veraltete Methode jedoch auch für die neue API verwenden. Hier ist ein nice explanation in details für Anfänger.

(auch ich lernen. Also, wenn jemand Experte dann einen Fehler finden, lassen Sie es mich wissen.)

Verwandte Themen