Organizar suas configurações Parte do Android Jetpack.

Telas de configurações grandes e complexas podem dificultar a localização de um configuração específica que eles querem alterar. A Biblioteca de Preferências oferece seguintes maneiras de organizar melhor suas telas de configurações.

Categorias de preferência

Se você tiver vários Objetos Preference em uma única você pode agrupá-los usando um PreferenceCategory Um PreferenceCategory mostra o título de uma categoria e separa visualmente a categoria.

Para definir um PreferenceCategory em XML, una as tags Preference com uma PreferenceCategory, da seguinte maneira:

<PreferenceScreen
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <PreferenceCategory
        app:key="notifications_category"
        app:title="Notifications">

        <SwitchPreferenceCompat
            app:key="notifications"
            app:title="Enable message notifications"/>

    </PreferenceCategory>

    <PreferenceCategory
        app:key="help_category"
        app:title="Help">

        <Preference
            app:key="feedback"
            app:summary="Report technical issues or suggest new features"
            app:title="Send feedback"/>

    </PreferenceCategory>

</PreferenceScreen>

O resultado será semelhante a este:

Uma imagem mostrando preferências com categorias
Figura 1. Preferências dentro de categorias.

Divida sua hierarquia em várias telas

Se você tiver um grande número de objetos Preference ou categorias distintas, pode exibi-los em telas separadas. Cada tela é um PreferenceFragmentCompat com a própria hierarquia separada. Preference objeto na tela inicial podem se vincular a subtelas que contêm informações preferências.

A figura 2 mostra uma hierarquia simples que contém duas categorias: Mensagens e Sincronizar.

Imagem que mostra uma tela de preferências com hierarquias
Figura 2. Uma hierarquia simples com duas categorias.

A Figura 3 mostra o mesmo conjunto de preferências dividido em várias telas:

Imagem mostrando uma hierarquia dividida em várias telas
Figura 3. Uma hierarquia dividida em várias telas.

Para vincular telas com uma Preference, você pode declarar uma app:fragment em XML ou é possível usar Preference.setFragment(). Inicie o nome completo do pacote do PreferenceFragmentCompat quando o Preference é tocado, conforme mostrado no exemplo a seguir:

<Preference
        app:fragment="com.example.SyncFragment"
        .../>

Quando um usuário toca em um Preference com um Fragment associado, o método de interface PreferenceFragmentCompat.OnPreferenceStartFragmentCallback.onPreferenceStartFragment() é chamado. É nesse método que você manipula a exibição da nova tela e onde a tela seja implementada na Activity ao redor.

Uma implementação típica é semelhante a esta:

Kotlin

class MyActivity : AppCompatActivity(),
    PreferenceFragmentCompat.OnPreferenceStartFragmentCallback {
    ...
    override fun onPreferenceStartFragment(caller: PreferenceFragmentCompat, pref: Preference): Boolean {
        // Instantiate the new Fragment.
        val args = pref.extras
        val fragment = supportFragmentManager.fragmentFactory.instantiate(
                classLoader,
                pref.fragment)
        fragment.arguments = args
        fragment.setTargetFragment(caller, 0)
        // Replace the existing Fragment with the new Fragment.
        supportFragmentManager.beginTransaction()
                .replace(R.id.settings_container, fragment)
                .addToBackStack(null)
                .commit()
        return true
    }
}

Java

public class MyActivity extends AppCompatActivity implements
        PreferenceFragmentCompat.OnPreferenceStartFragmentCallback {
    ...
    @Override
    public boolean onPreferenceStartFragment(PreferenceFragmentCompat caller, Preference pref) {
        // Instantiate the new Fragment.
        final Bundle args = pref.getExtras();
        final Fragment fragment = getSupportFragmentManager().getFragmentFactory().instantiate(
                getClassLoader(),
                pref.getFragment());
        fragment.setArguments(args);
        fragment.setTargetFragment(caller, 0);
        // Replace the existing Fragment with the new Fragment.
        getSupportFragmentManager().beginTransaction()
                .replace(R.id.settings_container, fragment)
                .addToBackStack(null)
                .commit();
        return true;
    }
}

PreferenceScreens

Declarar hierarquias aninhadas no mesmo recurso XML usando um objeto &lt;PreferenceScreen&gt; não é mais compatível. Usar objetos Fragment aninhados como alternativa.

Usar atividades separadas

Como alternativa, se precisar personalizar muito cada tela ou se quiser transições completas de Activity entre telas, use um Activity separado para cada PreferenceFragmentCompat. Ao fazer isso, é possível personalizar totalmente cada Activity e a tela de configurações correspondente. Para a maioria dos apps, recomendou isto; em vez disso, use Fragments, conforme descrito anteriormente.

Para mais informações sobre como iniciar um Activity usando uma Preference, consulte Ações de preferência.