2011-05-17 233 views
5

我有這樣的的preferences.xmlPreferenceScreen類未找到

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

    <CheckBoxPreference 
     android:key="displayNotification" 
     android:title="Display notification" 
     /> 

    <ListPreference 
     android:entries="@array/languages" 
     android:key="language" 
     /> 
</PreferenceScreen> 

PreferencesActivity.java,使用此XML類

public class PreferencesActivity extends PreferenceActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 

     setContentView(R.xml.preferences); 
    } 
} 

而且我已經在這樣

艙單申報
<activity android:name="com.tellthetime.PreferencesActivity" /> 

當我開始活動時,我得到一個類未找到異常,我不明白。

05-17 00:35:13.633: ERROR/AndroidRuntime(212): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.tellthetime/com.tellthetime.PreferencesActivity}: android.view.InflateException: Binary XML file line #2: Error inflating class PreferenceScreen 
05-17 00:35:13.633: ERROR/AndroidRuntime(212):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496) 
05-17 00:35:13.633: ERROR/AndroidRuntime(212):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512) 
05-17 00:35:13.633: ERROR/AndroidRuntime(212):  at android.app.ActivityThread.access$2200(ActivityThread.java:119) 
05-17 00:35:13.633: ERROR/AndroidRuntime(212):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863) 
05-17 00:35:13.633: ERROR/AndroidRuntime(212):  at android.os.Handler.dispatchMessage(Handler.java:99) 
05-17 00:35:13.633: ERROR/AndroidRuntime(212):  at android.os.Looper.loop(Looper.java:123) 
05-17 00:35:13.633: ERROR/AndroidRuntime(212):  at android.app.ActivityThread.main(ActivityThread.java:4363) 
05-17 00:35:13.633: ERROR/AndroidRuntime(212):  at java.lang.reflect.Method.invokeNative(Native Method) 
05-17 00:35:13.633: ERROR/AndroidRuntime(212):  at java.lang.reflect.Method.invoke(Method.java:521) 
05-17 00:35:13.633: ERROR/AndroidRuntime(212):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 
05-17 00:35:13.633: ERROR/AndroidRuntime(212):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
05-17 00:35:13.633: ERROR/AndroidRuntime(212):  at dalvik.system.NativeStart.main(Native Method) 
05-17 00:35:13.633: ERROR/AndroidRuntime(212): Caused by: android.view.InflateException: Binary XML file line #2: Error inflating class PreferenceScreen 
05-17 00:35:13.633: ERROR/AndroidRuntime(212):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:576) 
05-17 00:35:13.633: ERROR/AndroidRuntime(212):  at android.view.LayoutInflater.inflate(LayoutInflater.java:385) 
05-17 00:35:13.633: ERROR/AndroidRuntime(212):  at android.view.LayoutInflater.inflate(LayoutInflater.java:320) 
05-17 00:35:13.633: ERROR/AndroidRuntime(212):  at android.view.LayoutInflater.inflate(LayoutInflater.java:276) 
05-17 00:35:13.633: ERROR/AndroidRuntime(212):  at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:198) 
05-17 00:35:13.633: ERROR/AndroidRuntime(212):  at android.app.Activity.setContentView(Activity.java:1622) 
05-17 00:35:13.633: ERROR/AndroidRuntime(212):  at com.tellthetime.PreferencesActivity.onCreate(PreferencesActivity.java:13) 
05-17 00:35:13.633: ERROR/AndroidRuntime(212):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
05-17 00:35:13.633: ERROR/AndroidRuntime(212):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459) 
05-17 00:35:13.633: ERROR/AndroidRuntime(212):  ... 11 more 
05-17 00:35:13.633: ERROR/AndroidRuntime(212): Caused by: java.lang.ClassNotFoundException: android.view.PreferenceScreen in loader [email protected] 
05-17 00:35:13.633: ERROR/AndroidRuntime(212):  at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243) 
05-17 00:35:13.633: ERROR/AndroidRuntime(212):  at java.lang.ClassLoader.loadClass(ClassLoader.java:573) 
05-17 00:35:13.633: ERROR/AndroidRuntime(212):  at java.lang.ClassLoader.loadClass(ClassLoader.java:532) 
05-17 00:35:13.633: ERROR/AndroidRuntime(212):  at android.view.LayoutInflater.createView(LayoutInflater.java:466) 
05-17 00:35:13.633: ERROR/AndroidRuntime(212):  at android.view.LayoutInflater.onCreateView(LayoutInflater.java:544) 
05-17 00:35:13.633: ERROR/AndroidRuntime(212):  at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:66) 
05-17 00:35:13.633: ERROR/AndroidRuntime(212):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:563) 
05-17 00:35:13.633: ERROR/AndroidRuntime(212):  ... 19 more 

這已被要求here但沒有人回答。正如Heiko Rupp在那篇帖子中指出的那樣,android正在尋找android.view包中的類,但是該類在android.preferences中,這真的讓我失望了。

回答

11

你越來越困惑,你試圖設置優先定義爲佈局定義。首先爲活動的佈局,然後綁定自己的喜好XML:

... 
    setContentView(R.layout.layout); 
    addPreferencesFromResource(R.xml.preferences); 
    ... 
+1

謝謝!雖然 – Franco 2011-05-17 02:19:56

+0

沒有要求setContentView是的,我相信是這樣,但我想我應該加上它,所以區分很明顯。 – dmon 2011-05-17 02:31:42

+0

2011年7月:'addPreferencesFromResource'被標記爲不建議使用。改用'PreferenceFragment'。 – 2015-08-26 19:45:11

0

的的setContentView不是PreferenceScreen,只是 「addPrerencesFromResource(。R ** yourPreference);」好。 您的yourPreference視圖的活動應該繼承PreferenceActivity,但不能繼承Activity。

0

您不需要setContentView()方法PreferenceActivity

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

儘管它已棄用。改爲使用Preference Fragments