Eu tenho uma atividade de preferência que usa uma lista de preferências conforme definido por meu arquivo XML. Como eu definiria o resumo da atividade da lista com o valor selecionado?
Obrigado!
A maneira mais simples de fazer isso é deixar que o Android faça isso por você. Supondo que você quer o resumo para corresponder ao valor selecionado, você pode simplesmente definir o resumo do ListPreference
que"%s"
usando XML ou o setSummary
método em Java. Por exemplo:
<ListPreference
android:key="pref_list"
android:title="A list of preferences"
android:summary="%s"
android:entries="@array/pref_list_entries"
android:entryValues="@array/pref_list_entries_values"
android:defaultValue="0" />
O Android substituirá %s
pelo valor da string atual da preferência, conforme exibido pelo ListPreference
seletor do. O resumo da lista também será definido corretamente quando você entrar na atividade - você não precisa escrever nenhum código especial para configurá-la inicialmente.
Isso também funciona com o AndroidX ListPreference
.
Passei muito tempo demais mucking com SharedPreferences
ouvintes antes que eu descobri isso.
"%s"
? Em meus testes,"%s"
não funciona com o Gingerbread e versões anteriores.androidx
.Você pode usar
OnPreferenceChangeListener
para alterar dinamicamente o resumo. O problema é que ele obtém o valor selecionado (deandroid:entryValues
), não a legenda (android:entries
). Usei o código a seguirtoString()
, mas a solução adequada é encontrar a legenda para o valor. De qualquer forma, a ideia funciona:fonte
Eu também queria conseguir algo semelhante, mas o problema com https://stackoverflow.com/a/8155029/592025 é que ele mostra o valor da minha preferência (como 1, 2 3 etc.). Desejo mostrar a entrada (string legível por humanos) correspondente ao valor selecionado.
Então mudei dessa forma e funciona da maneira que preciso.
O truque é usar em
getEntry()
vez degetValue()
e depois que o valor for alterado, definir o valor explicitamente e ler a entrada.fonte
Acho que o que você está procurando é muito simples do que você pode imaginar, adicione a seguinte linha de código ao seu
Preference
item:Portanto, será mais ou menos assim:
fonte
Primeiro, obtenha uma referência a ListPreference em seu onCreate. Você pode usar findPreference (). Por exemplo:
Então, quando você carregar a Activity pela primeira vez e sempre que o valor de preferências for alterado, use qualquer método que você deseja obter o valor de ListPreference e defina o resumo com:
fonte
Este é o código que estou usando, não chama setValue manualmente, pois acredito que isso já seja feito em um estágio posterior.
Aqui está um exemplo:
fonte
Isso é exatamente o que eu fiz e funciona muito bem. No onSharedPreferenceChangeListener , apenas verifico a chave do que está sendo alterado e, em ListPreferences, converto de volta para Human legable (entrada em vez de entryValue) com as instruções if. Bem simples.
layout xml
array xml
fonte
Aqui está uma versão expandida da resposta de midhunhk que também aborda a útil string "android: summary"
E, só para ficar claro, android: summary foi removido do xml relacionado.
fonte
E aqui está uma maneira de lidar com a atualização do resumo das preferências de toque após a seleção do usuário.
fonte
Você tem um método bindPreferenceSummaryToValue em seu PreferenceActivity,
você pode adicionar facilmente o resumo à lista fazendo o seguinte:
No método OnCreate, você chama a função de ligação assim:
Você pode adicionar outros resumos facilmente da mesma maneira:
fonte
em onCreatePreferences faça isso ::
fonte