Ich brauche dynamische Einträge in ListPreference, so kann ich nicht konventionelle Art der XML-Setup verwenden, von denen es Tonnen von Materialien online gibt. Bisher habe ich folgendes Setup, wie Sie unten sehen können. Problem ist, dass wenn ich dies ausführe ich Dialog mit Titel und Nachricht sehe, aber keine Einträge angezeigt werden, obwohl ich weiß, dass Einträge und Werte nicht leer sind (Ich weiß, dass meine Einträge und Werte identisch sind, aber ich würde Fehler erhalten, wenn ich nicht habe mitgelieferten Einträge)Benutzerdefinierte ListPreference mit dynamischen Einträgen
my.preference.DynamicPreference
android:title="@string/date_format"
android:dialogMessage="@string/profile_info_date_format"
android:entryValues="@array/date_format_values"
android:entries="@array/date_format_values"
public class DynamicPreference extends ListPreference {
private int index;
public DynamicPreference(Context context, AttributeSet attrs) {
super(context, attrs);
}
public DynamicPreference(Context context) {
super(context);
}
@Override
protected void onPrepareDialogBuilder(AlertDialog.Builder builder) {
builder.setTitle(getTitle());
builder.setMessage(getDialogMessage());
builder.setSingleChoiceItems(entries(), -1, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
});
super.onPrepareDialogBuilder(builder);
}
@Override
public void setEntries(CharSequence[] sequence) {
CharSequence[] entries = listObjects().toArray(new CharSequence[listObjects().size()]);
super.setEntries(entries);
}
@Override
public void setEntryValues(CharSequence[] sequence) {
CharSequence[] values = getContext().getResources().getStringArray(R.string.date_format);
super.setEntryValues(values);
}
}
Ist dies die einzige Möglichkeit, die füllen 'ListPreference' auf programmatische Weise? – enzom83
@ enzom83 das ist Grundidee, wie es geht. Ich behaupte nicht, der Beste zu sein, aber soweit Sie sehen können, gab es keine anderen Beiträge in Bezug darauf. Hast du Probleme? –
@peter_budo: Es ist nicht notwendig, ListPreference zu erweitern, es ist ausreichend, einige Initialwerte in 'onCreate()' zu setzen und dann den 'onPreferenceClick()' Handler für das spezifische Objekt zu überschreiben. Hier ist ein Beispiel: http://stackoverflow.com/questions/6474707/how-to-fill-listpreference-dynamically-when-onpreferenceclick-is-triggered – ccpizza