Como definir o valor padrão de um ListPreference

Preciso definir o valor padrão para um ListPreference quando a atividade for iniciada. Eu tentei comListPreference.setDefaultvalue("value"); mas torna a primeira entrada da lista como padrão. Preciso disso, pois devo verificar uma condição e definir como padrão o valor que satisfaz essa condição; portanto, acho que isso não pode ser feito a partir do arquivo xml (comandroid:defaultValue)

Por exemplo, suponha que eu tenha essa matriz de valores em arrays.xml:

<string-array name="opts">
    <item>red</item>
    <item>green</item>
    <item>blue</item>
</string-array>

<string-array name="opts_values">
    <item>1</item>
    <item>2</item>
    <item>3</item>
</string-array>

No xml PreferenceScreen:

<ListPreference
    android:title="Colour select"
    android:summary="Select your favourite"
    android:key="colour"
    android:entries="@array/opts"
    android:entryValues="@array/opts_values" />

Na atividade, eu gostaria de fazer algo assim:

String mycolour;
if (something) {
    mycolour="1";
} else {
    mycolour="2";
}
ListPreference colour = (ListPreference) findPreference ("colour");
colour.setDefaultValue(mycolour);

Mas isso não funciona, porque faz a primeira escolha como padrão. Você poderia me explicar como criar outro como padrão? Obrigado.

questionAnswers(10)

yourAnswerToTheQuestion