Android应用程序:首选项活动崩溃

时间:2013-11-25 03:53:46

标签: android

我正在尝试设置一个偏好设置活动来编辑我的某些应用设置(显然),但是当我按下操作栏按钮时它会一直崩溃。

这是运行输出:

11-24 19:40:18.629: E/AndroidRuntime(13755): FATAL EXCEPTION: main
11-24 19:40:18.629: E/AndroidRuntime(13755): Process: com.andrewq.simplestflashlight, PID: 13755
11-24 19:40:18.629: E/AndroidRuntime(13755): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.andrewq.simplestflashlight/com.andrewq.simplestflashlight.Preferences}: android.view.InflateException: Binary XML file line #2: Error inflating class PreferenceScreen
11-24 19:40:18.629: E/AndroidRuntime(13755):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2176)
11-24 19:40:18.629: E/AndroidRuntime(13755):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2226)
11-24 19:40:18.629: E/AndroidRuntime(13755):    at android.app.ActivityThread.access$700(ActivityThread.java:135)
11-24 19:40:18.629: E/AndroidRuntime(13755):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1397)
11-24 19:40:18.629: E/AndroidRuntime(13755):    at android.os.Handler.dispatchMessage(Handler.java:102)
11-24 19:40:18.629: E/AndroidRuntime(13755):    at android.os.Looper.loop(Looper.java:137)
11-24 19:40:18.629: E/AndroidRuntime(13755):    at android.app.ActivityThread.main(ActivityThread.java:4998)
11-24 19:40:18.629: E/AndroidRuntime(13755):    at java.lang.reflect.Method.invoke(Native Method)
11-24 19:40:18.629: E/AndroidRuntime(13755):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
11-24 19:40:18.629: E/AndroidRuntime(13755):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
11-24 19:40:18.629: E/AndroidRuntime(13755): Caused by: android.view.InflateException: Binary XML file line #2: Error inflating class PreferenceScreen
11-24 19:40:18.629: E/AndroidRuntime(13755):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:707)
11-24 19:40:18.629: E/AndroidRuntime(13755):    at android.view.LayoutInflater.inflate(LayoutInflater.java:469)
11-24 19:40:18.629: E/AndroidRuntime(13755):    at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
11-24 19:40:18.629: E/AndroidRuntime(13755):    at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
11-24 19:40:18.629: E/AndroidRuntime(13755):    at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:290)
11-24 19:40:18.629: E/AndroidRuntime(13755):    at android.app.Activity.setContentView(Activity.java:1928)
11-24 19:40:18.629: E/AndroidRuntime(13755):    at com.andrewq.simplestflashlight.Preferences.onCreate(Preferences.java:16)
11-24 19:40:18.629: E/AndroidRuntime(13755):    at android.app.Activity.performCreate(Activity.java:5243)
11-24 19:40:18.629: E/AndroidRuntime(13755):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
11-24 19:40:18.629: E/AndroidRuntime(13755):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2140)
11-24 19:40:18.629: E/AndroidRuntime(13755):    ... 9 more
11-24 19:40:18.629: E/AndroidRuntime(13755): Caused by: java.lang.ClassNotFoundException: Didn't find class "android.view.PreferenceScreen" on path: DexPathList[[zip file "/data/app/com.andrewq.simplestflashlight-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.andrewq.simplestflashlight-1, /vendor/lib, /system/lib]]
11-24 19:40:18.629: E/AndroidRuntime(13755):    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
11-24 19:40:18.629: E/AndroidRuntime(13755):    at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
11-24 19:40:18.629: E/AndroidRuntime(13755):    at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
11-24 19:40:18.629: E/AndroidRuntime(13755):    at android.view.LayoutInflater.createView(LayoutInflater.java:559)
11-24 19:40:18.629: E/AndroidRuntime(13755):    at android.view.LayoutInflater.onCreateView(LayoutInflater.java:652)
11-24 19:40:18.629: E/AndroidRuntime(13755):    at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:66)
11-24 19:40:18.629: E/AndroidRuntime(13755):    at android.view.LayoutInflater.onCreateView(LayoutInflater.java:669)
11-24 19:40:18.629: E/AndroidRuntime(13755):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:694)
11-24 19:40:18.629: E/AndroidRuntime(13755):    ... 18 more
11-24 19:40:18.629: E/AndroidRuntime(13755):    Suppressed: java.lang.ClassNotFoundException: android.view.PreferenceScreen
11-24 19:40:18.629: E/AndroidRuntime(13755):        at java.lang.Class.classForName(Native Method)
11-24 19:40:18.629: E/AndroidRuntime(13755):        at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
11-24 19:40:18.629: E/AndroidRuntime(13755):        at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
11-24 19:40:18.629: E/AndroidRuntime(13755):        at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
11-24 19:40:18.629: E/AndroidRuntime(13755):        ... 24 more
11-24 19:40:18.629: E/AndroidRuntime(13755):    Caused by: java.lang.NoClassDefFoundError: Class "Landroid/view/PreferenceScreen;" not found
11-24 19:40:18.629: E/AndroidRuntime(13755):        ... 28 more

以下是活动的课程:

//Class name omitted but added in actual code
//Imports omitted but added in actual code
public class Preferences extends PreferenceActivity{

        @Override
        public void onCreate (Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.xml.preferences);

            //Initialize the "up" button
            getActionBar().setDisplayHomeAsUpEnabled(true);
        }

        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            switch (item.getItemId()) {
            // Respond to the action bar's Up/Home button
            case android.R.id.home:
                Intent upIntent = NavUtils.getParentActivityIntent(this);
                if (NavUtils.shouldUpRecreateTask(this, upIntent)) {
                    // This activity is NOT part of this app's task, so create a new task
                    // when navigating up, with a synthesized back stack.
                    TaskStackBuilder.create(this)
                            // Add all of this activity's parents to the back stack
                            .addNextIntentWithParentStack(upIntent)
                            // Navigate up to the closest parent
                            .startActivities();
                } else {
                    // This activity is part of this app's task, so simply
                    // navigate up to the logical parent activity.
                    NavUtils.navigateUpTo(this, upIntent);
                }
            }
            return super.onOptionsItemSelected(item);
        }

这是布局文件:

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

    <PreferenceCategory android:title="Application Settings" android:padding="10dp" >

        <CheckBoxPreference android:title="Check me!" 
            android:summary="This is a sample check box preference." 
            android:key="prefCheck" /> 

    </PreferenceCategory>

</PreferenceScreen>

最后这里是菜单文件:

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

    <item
        android:id="@+id/action_about"
        android:icon="@drawable/action_about"
        android:showAsAction="always"
        android:title="@string/action_about"/>

    <item
        android:id="@+id/action_settings"
        android:showAsAction="never"
        android:title="@string/action_settings"/>

</menu>

很抱歉,如果没有不需要的代码,但我不知道要省略什么,以便解决我的问题。如果有人帮助,请提前致谢:)

安德鲁

1 个答案:

答案 0 :(得分:3)

R.xml.preferences中的首选项定义无法设置为常规布局。替换:

setContentView(R.xml.preferences);

使用:

addPreferencesFromResource(R.xml.preferences);

引自the article on Android Settings

  

最重要的是要记住,你不加载布局   onCreate()回调期间的视图。相反,你打电话   addPreferencesFromResource()添加您声明的首选项   在活动的XML文件中。

相关问题