私はカスタムDialogPreferenceを作成しており、ListPreferenceが必要とするのと同様に、entryとentryValuesという名前の文字列の2つの配列を使用して設定を設定します。コンストラクターがAttributeSetパラメーターを使用して呼び出されたときに両方の配列が存在するように見えても、getstyledAttributesを介してスタイル付き配列をフェッチしようとするとnullが返され失敗します。
何が間違っているので、どうすればこれを修正できますか?
私のカスタムクラスコードは次のとおりです。
public class BackgroundPicker extends DialogPreference {
private CharSequence[] mEntries;
private CharSequence[] mEntryValues;
public BackgroundPicker(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// Print all values in attrs AttributeSet:
for (int i=0;i<attrs.getAttributeCount();i++) {
String name = attrs.getAttributeName(i);
Object value = attrs.getAttributeValue(i);
Log.d(TAG, name + " : " + value + " of type " + value.getClass().getSimpleName());
}
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ListPreference, 0, 0);
// getIndexCount returns zero !
for(int i=0; i<a.getIndexCount(); i++) {
TypedValue v = a.peekValue(i);
Log.d(TAG, "value[" + i + "] = " + v.toString());
}
// Both entries and entryValues are null.
mEntries = a.getTextArray(R.styleable.ListPreference_entries);
mEntryValues = a.getTextArray(R.styleable.ListPreference_entryValues);
}
}
私のデバッグ出力は次のとおりです。
BackgroundPicker CTOR: IN
BackgroundPicker CTOR param attrs:
entries : @2131099650 of type String
title : @2131165247 of type String
key : BackgroundImage of type String
summary : @2131165248 of type String
defaultValue : back.png of type String
entryValues : @2131099651 of type String
BackgroundPicker CTOR param defStyle = 0
BackgroundPicker CTOR: OUT
styles.xmlの私のスタイル
<declare-styleable name="ListPreference">
<attr name="entries" format="reference" />
<attr name="entryValues" format="reference" />
</declare-styleable>
array.xmlの私のデータ
<array name="Backgrounds">
<item>back.png</item>
<item>one.png</item>
</array>
と私の好みの設定:
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<PreferenceCategory android:title="@string/generaloptions" >
<BackgroundPicker
android:defaultValue="back.png"
android:entries="@+array/Backgrounds"
android:entryValues="@+array/Backgrounds"
android:key="BackgroundImage"
android:summary="@string/backgroundImageSummary"
android:title="@string/backgroundImage" />
</PreferenceCategory>
</PreferenceScreen>