2012-06-26 59 views
0

當我在應用程序菜單中單擊設置時,應用程序即刻崩潰。我不知道如何修復它。打開首選項後應用程序崩潰

我是新來的Android,我從學到你好,Android的書。

應用程序文件下面:


PrefsFragment.java:

package org.example.sudoku; 

import android.os.Bundle; 
import android.preference.PreferenceFragment; 

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

RES/XML /的preferences.xml:

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

    <CheckBoxPreference 
     android:key="music" 
     android:title="@string/music_title" 
     android:summary="@string/music_summary" 
     android:defaultValue="true" /> 

    <CheckBoxPreference 
     android:key="hints" 
     android:title="@string/hints_title" 
     android:summary="@string/hints_summary" 
     android:defaultValue="true" /> 

</PreferenceScreen> 

logcat的:

06-26 16:14:26.600: W/dalvikvm(2827): threadid=1: thread exiting with uncaught exception (group=0x40a041f8) 
06-26 16:14:26.610: E/AndroidRuntime(2827): FATAL EXCEPTION: main 
06-26 16:14:26.610: E/AndroidRuntime(2827): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{org.example.sudoku/org.example.sudoku.PrefsFragment}: java.lang.ClassCastException: org.example.sudoku.PrefsFragment cannot be cast to android.app.Activity 
06-26 16:14:26.610: E/AndroidRuntime(2827):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1993) 
06-26 16:14:26.610: E/AndroidRuntime(2827):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2104) 
06-26 16:14:26.610: E/AndroidRuntime(2827):  at android.app.ActivityThread.access$600(ActivityThread.java:132) 
06-26 16:14:26.610: E/AndroidRuntime(2827):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1157) 
06-26 16:14:26.610: E/AndroidRuntime(2827):  at android.os.Handler.dispatchMessage(Handler.java:99) 
06-26 16:14:26.610: E/AndroidRuntime(2827):  at android.os.Looper.loop(Looper.java:137) 
06-26 16:14:26.610: E/AndroidRuntime(2827):  at android.app.ActivityThread.main(ActivityThread.java:4575) 
06-26 16:14:26.610: E/AndroidRuntime(2827):  at java.lang.reflect.Method.invokeNative(Native Method) 
06-26 16:14:26.610: E/AndroidRuntime(2827):  at java.lang.reflect.Method.invoke(Method.java:511) 
06-26 16:14:26.610: E/AndroidRuntime(2827):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789) 
06-26 16:14:26.610: E/AndroidRuntime(2827):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556) 
06-26 16:14:26.610: E/AndroidRuntime(2827):  at dalvik.system.NativeStart.main(Native Method) 
06-26 16:14:26.610: E/AndroidRuntime(2827): Caused by: java.lang.ClassCastException: org.example.sudoku.PrefsFragment cannot be cast to android.app.Activity 
06-26 16:14:26.610: E/AndroidRuntime(2827):  at android.app.Instrumentation.newActivity(Instrumentation.java:1023) 
06-26 16:14:26.610: E/AndroidRuntime(2827):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1984) 
06-26 16:14:26.610: E/AndroidRuntime(2827):  ... 11 more 

回答

2

的問題是,你需要延長PreferenceActivity,不PreferenceFragment。 PreferenceActivity擴展了ListActivity,它擴展了Activity,而PreferenceFragment擴展了Fragment。

這就是爲什麼你有ClassCast異常。

+0

這是行得通的,但是當我使用PreferenceActivity時,Eclipse會說addPreferencesFromResource已被棄用。這是任何選擇打開首選項? – rgtk

+0

是的,這是真的 - 但書中的代碼是從2010年開始的。如果您想使用PreferenceFragment,請查看更多最新的文檔:http://developer.android.com/reference/android/preference/PreferenceActivity.html和http://developer.android.com/reference/android/preference/PreferenceFragment.html – hovanessyan

0

您是如何訪問PreferenceFragment的?

它是否包含在FragmentActivity中?

你不能直接用startActivity()調用片段;

相關問題