自定义pref getString android

自定义pref getString android,android,preferences,Android,Preferences,我有一个自定义Pref: public class ImagePreference2 extends Preference { private Drawable mIcon; Bitmap a; public ImagePreference2(final Context context, final AttributeSet attrs, final int defStyle) { super(context, attrs, defStyle);

我有一个自定义Pref:

public class ImagePreference2 extends Preference {
    private Drawable mIcon;
    Bitmap a;

    public ImagePreference2(final Context context, final AttributeSet attrs, final int defStyle) {
        super(context, attrs, defStyle);

        this.setLayoutResource(R.layout.imagepref2);

        }
}
我添加了如下内容:

<en.cold.ImagePreference2
        android:key="test02"
        android:summary="ImagePreference with default icon"
        android:title="ImagePreference" 
        android:selectable="false"
        android:defaultValue="defaultV"
        />
我得到一个错误:

  01-26 16:00:35.031: E/AndroidRuntime(22564): FATAL EXCEPTION: main
    01-26 16:00:35.031: E/AndroidRuntime(22564): java.lang.ClassCastException: java.lang.Boolean cannot be cast to java.lang.String
    01-26 16:00:35.031: E/AndroidRuntime(22564):    at android.app.SharedPreferencesImpl.getString(SharedPreferencesImpl.java:224)
    01-26 16:00:35.031: E/AndroidRuntime(22564):    at en.cold.Settings.onSharedPreferenceChanged(Settings.java:130)
    01-26 16:00:35.031: E/AndroidRuntime(22564):    at android.app.SharedPreferencesImpl$EditorImpl.notifyListeners(SharedPreferencesImpl.java:475)
    01-26 16:00:35.031: E/AndroidRuntime(22564):    at android.app.SharedPreferencesImpl$EditorImpl.apply(SharedPreferencesImpl.java:385)
    01-26 16:00:35.031: E/AndroidRuntime(22564):    at android.preference.Preference.tryCommit(Preference.java:1357)
    01-26 16:00:35.031: E/AndroidRuntime(22564):    at android.preference.Preference.persistBoolean(Preference.java:1623)
    01-26 16:00:35.031: E/AndroidRuntime(22564):    at android.preference.TwoStatePreference.setChecked(TwoStatePreference.java:83)
    01-26 16:00:35.031: E/AndroidRuntime(22564):    at android.preference.TwoStatePreference.onClick(TwoStatePreference.java:69)
    01-26 16:00:35.031: E/AndroidRuntime(22564):    at android.preference.Preference.performClick(Preference.java:957)
    01-26 16:00:35.031: E/AndroidRuntime(22564

是否可以使用custompref获取字符串?

从堆栈跟踪中,您的活动中似乎还有一个TwoStatePreference,这当然是布尔类型。您是否对此首选项使用了相同的键?必须有其他首选项定义。如果您的ImagePreference2只扩展了Preference,那么如果没有定义其他首选项,我看不出堆栈跟踪如何遇到TwoStatePreference。
  01-26 16:00:35.031: E/AndroidRuntime(22564): FATAL EXCEPTION: main
    01-26 16:00:35.031: E/AndroidRuntime(22564): java.lang.ClassCastException: java.lang.Boolean cannot be cast to java.lang.String
    01-26 16:00:35.031: E/AndroidRuntime(22564):    at android.app.SharedPreferencesImpl.getString(SharedPreferencesImpl.java:224)
    01-26 16:00:35.031: E/AndroidRuntime(22564):    at en.cold.Settings.onSharedPreferenceChanged(Settings.java:130)
    01-26 16:00:35.031: E/AndroidRuntime(22564):    at android.app.SharedPreferencesImpl$EditorImpl.notifyListeners(SharedPreferencesImpl.java:475)
    01-26 16:00:35.031: E/AndroidRuntime(22564):    at android.app.SharedPreferencesImpl$EditorImpl.apply(SharedPreferencesImpl.java:385)
    01-26 16:00:35.031: E/AndroidRuntime(22564):    at android.preference.Preference.tryCommit(Preference.java:1357)
    01-26 16:00:35.031: E/AndroidRuntime(22564):    at android.preference.Preference.persistBoolean(Preference.java:1623)
    01-26 16:00:35.031: E/AndroidRuntime(22564):    at android.preference.TwoStatePreference.setChecked(TwoStatePreference.java:83)
    01-26 16:00:35.031: E/AndroidRuntime(22564):    at android.preference.TwoStatePreference.onClick(TwoStatePreference.java:69)
    01-26 16:00:35.031: E/AndroidRuntime(22564):    at android.preference.Preference.performClick(Preference.java:957)
    01-26 16:00:35.031: E/AndroidRuntime(22564