android - 无法在 preferenceFragment 中膨胀自定义首选项

标签 android preferenceactivity

我在尝试扩充自定义首选项时继续收到错误消息。我尝试了多种方法,但无法正常工作。

public class SettingsFragment extends PreferenceFragment {

    final static String TAG = "Preferance Fragment";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.preferences);
    }
}

首选项.xml

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<CheckBoxPreference
    android:key="notifications_on"
    android:title="Notifications"
    android:summary="Display light/group control in notification bar."
    android:defaultValue="true" />

<ListPreference
    android:key="light_transition_speed"
    android:title="Light Transition"
    android:summary="Change the speed at which light changes to new settings"
    android:dialogTitle="Light Transition Speed"
    android:entries="@array/light_transition_speed"
    android:entryValues="@array/light_transition_speed"
    android:defaultValue="Medium" />

<com.mackeytech.test.notifyPreferences
    android:key="tester"/>

</PreferenceScreen>

这是 notifiyPreferences 文件:

public class notifyPreferences extends Preference {

//Tag used for logcat
String TAG = "notifyPreferances";

    //Constructor
    notifyPreferences(Context context, AttributeSet attrs) {
        super(context, attrs);
        setLayoutResource(R.layout.preference_line_view);
    }

}

这里是布局文件preference_line_view.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/widget_frame"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@android:id/title"
     style="@android:style/TextAppearance.DeviceDefault.SearchResult.Title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Title" />

    <TextView
        android:id="@android:id/summary"
        style="@android:style/TextAppearance.DeviceDefault.SearchResult.Subtitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Summary" />
</LinearLayout>

我在构造函数中为自定义首选项分配它,但我尝试通过分配布局在 xml 文件中进行分配。我也刚刚使用了一个空文件,并尝试在 xml 文件中执行标题、键和摘要,但是当我在首选项文件中有包 com.mackeytech.test.notifyPreferences 时,我无法加载 preferenceFragment。

这是我看到的错误:

11-21 13:49:00.925 5321-5321/? E/AndroidRuntime: FATAL EXCEPTION: main
11-21 13:49:00.925 5321-5321/? E/AndroidRuntime: Process: com.mackeytech.Simplicity, PID: 5321
11-21 13:49:00.925 5321-5321/? E/AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mackeytech.Simplicity/com.mackeytech.test.SettingsActivity}: android.view.InflateException: Binary XML file line #19: Error inflating class com.mackeytech.test.notifyPreferences
11-21 13:49:00.925 5321-5321/? E/AndroidRuntime:     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
11-21 13:49:00.925 5321-5321/? E/AndroidRuntime:     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
11-21 13:49:00.925 5321-5321/? E/AndroidRuntime:     at android.app.ActivityThread.access$800(ActivityThread.java:144)
11-21 13:49:00.925 5321-5321/? E/AndroidRuntime:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
11-21 13:49:00.925 5321-5321/? E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:102)
11-21 13:49:00.925 5321-5321/? E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:135)
11-21 13:49:00.925 5321-5321/? E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5221)
11-21 13:49:00.925 5321-5321/? E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Native Method)
11-21 13:49:00.925 5321-5321/? E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Method.java:372)
11-21 13:49:00.925 5321-5321/? E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
11-21 13:49:00.925 5321-5321/? E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
11-21 13:49:00.925 5321-5321/? E/AndroidRuntime:  Caused by: android.view.InflateException: Binary XML file line #19: Error inflating class com.mackeytech.test.notifyPreferences
11-21 13:49:00.925 5321-5321/? E/AndroidRuntime:     at android.preference.GenericInflater.createItem(GenericInflater.java:386)
11-21 13:49:00.925 5321-5321/? E/AndroidRuntime:     at android.preference.GenericInflater.createItemFromTag(GenericInflater.java:430)
11-21 13:49:00.925 5321-5321/? E/AndroidRuntime:     at android.preference.GenericInflater.rInflate(GenericInflater.java:481)
11-21 13:49:00.925 5321-5321/? E/AndroidRuntime:     at android.preference.GenericInflater.inflate(GenericInflater.java:326)
11-21 13:49:00.925 5321-5321/? E/AndroidRuntime:     at android.preference.GenericInflater.inflate(GenericInflater.java:263)
11-21 13:49:00.925 5321-5321/? E/AndroidRuntime:     at android.preference.PreferenceManager.inflateFromResource(PreferenceManager.java:272)
11-21 13:49:00.925 5321-5321/? E/AndroidRuntime:     at android.preference.PreferenceFragment.addPreferencesFromResource(PreferenceFragment.java:299)
11-21 13:49:00.925 5321-5321/? E/AndroidRuntime:     at com.mackeytech.test.SettingsFragment.onCreate(SettingsFragment.java:33)
11-21 13:49:00.925 5321-5321/? E/AndroidRuntime:     at android.app.Fragment.performCreate(Fragment.java:2031)
11-21 13:49:00.925 5321-5321/? E/AndroidRuntime:     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:863)
11-21 13:49:00.925 5321-5321/? E/AndroidRuntime:     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1045)
11-21 13:49:00.925 5321-5321/? E/AndroidRuntime:     at android.app.FragmentManagerImpl.addFragment(FragmentManager.java:1147)
11-21 13:49:00.925 5321-5321/? E/AndroidRuntime:     at android.app.FragmentManagerImpl.onCreateView(FragmentManager.java:2116)
11-21 13:49:00.925 5321-5321/? E/AndroidRuntime:     at android.app.Activity.onCreateView(Activity.java:5286)
11-21 13:49:00.925 5321-5321/? E/AndroidRuntime:     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:733)
11-21 13:49:00.925 5321-5321/? E/AndroidRuntime:     at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)
11-21 13:49:00.925 5321-5321/? E/AndroidRuntime:     at android.view.LayoutInflater.inflate(LayoutInflater.java:504)
11-21 13:49:00.925 5321-5321/? E/AndroidRuntime:     at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
11-21 13:49:00.925 5321-5321/? E/AndroidRuntime:     at android.view.LayoutInflater.inflate(LayoutInflater.java:365)
11-21 13:49:00.925 5321-5321/? E/AndroidRuntime:     at android.support.v7.app.ActionBarActivityDelegateBase.setContentView(ActionBarActivityDelegateBase.java:240)
11-21 13:49:00.925 5321-5321/? E/AndroidRuntime:     at android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.java:102)
11-21 13:49:00.925 5321-5321/? E/AndroidRuntime:     at com.mackeytech.test.SettingsActivity.onCreate(SettingsActivity.java:14)
11-21 13:49:00.925 5321-5321/? E/AndroidRuntime:     at android.app.Activity.performCreate(Activity.java:5937)

最佳答案

您可能使用了错误类型的 Preference。检查您的 PreferenceFragmentandroid.preference.PreferenceFragment 还是 android.support.v14.preference.PreferenceFragment。然后将您的 Preference 类型与您的 PreferenceFragment 类型相匹配。

关于android - 无法在 preferenceFragment 中膨胀自定义首选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33861344/

相关文章:

java - 使用 editText 进行搜索功能 - ListView

android - 在首选项中更改摘要的字体大小

android - 无法注册 BroadcastReceiver

android - 如何使用 parse.com 将 Android 设备注册到推送 channel

android - 如何从 WebView 获取 WebviewClient 实例而不是在 Android 的 API 26 上?

android - 使用实时数据,如何只显示一次对话框?

Android 视频不会在 webview 中恢复

android - 在选项卡中显示偏好 Activity

android - 自定义 Android 首选项背景

安卓。 CheckBox偏好颜色