Eu tenho uma atividade que estende PreferenceActivity. Estou carregando preferências do arquivo xml. Mas, em alguns casos, preciso ocultar completamente uma das preferências da tela com base no estado do meu aplicativo. Existe um método setEnabled, mas não é exatamente o que eu quero. Eu quero remover completamente essa preferência da tela. É possível ?
android
preferences
Alex Volovoy
fonte
fonte
setEnabled()
Se você
Preference
estiver dentro de aPreferenceCategory
, precisará fazer o seguinte:XML:
Java:
fonte
PreferenceCategory
.No caso em que a preferência é um filho direto da tela de preferências, aqui está um código independente:
fonte
findPreference
para a categoria e remova a preferência da categoriaSe você deseja algo que altere dinamicamente os prefs, por exemplo, em um SwitchPreference, achei a melhor maneira de colocar todas as minhas subopções em dois contêineres de categoria. Inicialmente, você terá tudo o que é mostrado e depois removerá os bits que não deseja. O mais inteligente, é que você apenas aciona a recriação quando algo muda e não precisa criar nada manualmente ou se preocupar em colocar as coisas de volta na ordem correta.
A única desvantagem que posso ver com isso é que há um flash quando a tela é recriada do zero.
fonte
No seu arquivo XML:
No seu código:
fonte
Se você estiver usando PreferenceFragmentCompat, poderá definir a visibilidade em xml.
As preferências no seu xml serão convertidas para versões do AppCompat automaticamente. Você pode usar o atributo ' app: isPreferenceVisible ' no seu xml
preferências.xml
O atributo está documentado em https://developer.android.com/guide/topics/ui/settings/components-and-attributes
A adição
PreferenceFragmentCompat
está documentada em https://developer.android.com/guide/topics/ui/settings/#inflate_the_hierarchyExemplo:
fonte
Eu recomendo usar a preferência v7, ele tem
setVisible()
método. Mas ainda não tentei. Assim, você tem que usar emPreferenceFragment
vez dePreferenceActivity
.fonte
No arquivo XML, você pode fazer uma preferência oculta deixando as tags de título e resumo em branco.
fonte
Aqui está uma maneira genérica de fazer isso que funciona independentemente de a preferência estar sob um
PreferenceCategory
ouPreferenceScreen
.fonte
Como o
getParent()
método API 26 do Android está disponível: https://developer.android.com/reference/android/preference/Preference.html#getParent ()Embora você possa fazer o seguinte:
fonte
Você pode fazer isso de duas maneiras:
1.Se você usa a biblioteca de suporte, pode criar um mapa da árvore de preferências e de seus pais e remover uma preferência usando o pai. Aqui está uma função para gerar esse mapa:
fonte
setVisible()
está disponível desde a versão 24.1.0 da biblioteca de suporte.setVisibile()
método estivesse disponível no android-x, que eu tentei esclarecer. Sem ofensa, por favor.Se você deseja avaliar, e com base nessa máscara, uma alternativa pode ser
Tudo isso deve estar dentro
fonte
Se você estiver fazendo o que acho que está tentando fazer (porque estou tentando fazê-lo agora), talvez seja melhor ativar / desativar a preferência. Como removê-lo, ele é retirado da tela de preferências e talvez você não possa adicioná-lo de volta para o local desejado, se criou a tela programaticamente.
pref.setEnabled (false); pref.setEnabled (true);
embora isso possa ser preterido. Funciona para o caso de uso que estou passando agora.
fonte