Java 在Android中使用设置时出现运行时异常(我正在学习udacity Android开发者课程)

Java 在Android中使用设置时出现运行时异常(我正在学习udacity Android开发者课程),java,android,android-fragments,android-activity,Java,Android,Android Fragments,Android Activity,我是android新手,学习Udacity android开发者课程。 我在第三章,他们教你如何在你的应用程序中添加设置。我已经从android studio添加了设置活动。当我点击设置菜单时,我的应用程序崩溃了。 这是我的pref_general.xml文件 <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <!-- NOTE: EditTextPreference a

我是android新手,学习Udacity android开发者课程。 我在第三章,他们教你如何在你的应用程序中添加设置。我已经从android studio添加了设置活动。当我点击设置菜单时,我的应用程序崩溃了。 这是我的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" />
当我点击设置菜单时,出现以下异常

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)

有什么帮助吗?抱歉,如果这是非常幼稚的事情

我能够解决这个问题。
我正在更改SettingActivity的OnCreate,而不是更改SettingFragment的OnCreate,它是SettingActivity的静态私有类。

@mayank agrawal

他的意思是,这些更改将在扩展PreferenceFragment的类中完成。i、 e您必须扩展PreferenceFragment

虽然代码在代码中有很好的解释性,但我在这里只是想提一下他的意思(在代码中添加注释)

如果您的应用程序支持API 10或更低版本,则必须使用首选项活动。不过,您也可以在新API上使用这种不推荐的方式。这是给初学者的建议


(我也在学习。因此,如果任何专家发现任何错误,请让我知道。)

Cna您可以分享一些例子吗?
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)
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) {
        ...
    }
}