0

我遇到了一个似乎出现在模拟器和个人可调试设备上的异常。

这是preferences.xml 文件:

<?xml version="1.0" encoding="utf-8"?>
<preference-headers xmlns:android="http://schemas.android.com/apk/res/android">
    <header 
        android:title="sound"
        android:summary=""
        android:icon="@android:drawable/ic_media_ff"
        android:fragment="com.example.app.activities.PreferencesActivity$SoundSettingsPreferenceFragment" />
</preference-headers>

这是preferences_sound 文件:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <PreferenceCategory 
        android:title="First Category"
        android:key="first_category">

        <CheckBoxPreference
            android:key="pref_cbx"
            android:title="checkbox"
            android:summary="checkbox summ"
            android:defaultValue="true" />

    </PreferenceCategory>
</PreferenceScreen>

这是相关的代码 Activity

import java.util.List;

import android.annotation.SuppressLint;
import android.preference.PreferenceActivity;
import android.os.Bundle;
import android.preference.PreferenceFragment;
import android.preference.PreferenceManager;

import com.example.app.R;

@SuppressLint("NewApi")
public class PreferencesActivity extends PreferenceActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


        PreferenceManager.setDefaultValues(this, R.xml.preferences, false);
    }

    @Override
    public void onBuildHeaders(List<Header> target) {
        loadHeadersFromResource(R.xml.preferences, target);
    }

    public static class SoundSettingsPreferenceFragment extends PreferenceFragment {

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.preferences_sound);
        }
    }
}

这是输出错误

10-30 11:31:58.812: E/ActivityThread(9783): Failed to inflate
10-30 11:31:58.812: E/ActivityThread(9783): android.view.InflateException: Binary XML file line #3: Error inflating class preference-headers

...

10-30 11:31:58.812: E/ActivityThread(9783): Caused by: java.lang.ClassNotFoundException: android.preference.preference-headers

...

4

3 回答 3

2

通常,当您忽略导出正在使用的外部库时会出现此错误。如果您使用的是外部 jar 文件,请确保进入属性并选中该选项卡中的导出复选框。

java build path -> order and export
于 2012-10-30T09:51:56.783 回答
2

Android 从可绘制文件夹调整其位图大小以适应屏幕。它在布局膨胀期间执行此操作。如果您的应用程序仅在“可绘制”文件夹中包含图像(或者就此而言,如果您只有一个用于所有分辨率的文件夹),则调整大小有时会失败。您甚至可以获得 OOM 异常。因此,我建议您创建一个 drawable-mdpi 文件夹,并将该文件夹中的所有可绘制对象也复制到 mdpi。

我知道这听起来很疯狂,但大多数膨胀的布局问题都会随着这一变化而消失。试试看。反正不疼。

于 2012-10-30T09:52:23.747 回答
0

只需检查应用于 PreferenceActivity 的主题是否与 PreferenceActivity 对象兼容。

于 2014-03-14T12:10:38.220 回答