Organizzare le impostazioni Parte di Android Jetpack.

Schermate di impostazioni grandi e complesse possono rendere difficile per l'utente trovare l'impostazione specifica da modificare. La libreria Preference offre i seguenti modi per organizzare meglio le schermate delle impostazioni.

Categorie di preferenze

Se hai diversi argomenti Preference oggetti in una singola schermata, puoi raggrupparli utilizzando PreferenceCategory. R PreferenceCategory visualizza il titolo di una categoria e separa visivamente la categoria.

Per definire un PreferenceCategory in XML, racchiudi i tag Preference con un PreferenceCategory, come segue:

<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>

Il risultato sarà simile al seguente:

Un&#39;immagine che mostra preferenze con categorie
. Figura 1. Preferenze all'interno delle categorie.

Suddividi la gerarchia in più schermate

Se hai un numero elevato di Preference oggetti o categorie distinte, possono essere visualizzate su schermi separati. Ogni schermata PreferenceFragmentCompat con una propria gerarchia separata. Preference oggetti nella schermata iniziale può rimandare a schermate secondarie contenenti preferenze.

La figura 2 mostra una gerarchia semplice che contiene due categorie: Messaggi e Sincronizza.

Un&#39;immagine che mostra una schermata di preferenze con gerarchie
. Figura 2. Una semplice gerarchia con due categorie.

La Figura 3 mostra lo stesso insieme di preferenze suddivise in più schermate:

Un&#39;immagine che mostra una gerarchia divisa in più schermate
. Figura 3. Una gerarchia divisa in più schermate.

Per collegare gli schermi con un Preference, puoi dichiarare un app:fragment in XML oppure puoi utilizzare Preference.setFragment() Avvia il nome completo del pacchetto di PreferenceFragmentCompat quando viene toccato Preference, come mostrato nell'esempio seguente:

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

Quando un utente tocca un Preference con un Fragment associato, l'interfaccia metodo PreferenceFragmentCompat.OnPreferenceStartFragmentCallback.onPreferenceStartFragment(): . È qui che gestisci la visualizzazione della nuova schermata lo schermo sia implementato nell'area Activity circostante.

Una tipica implementazione è simile alla seguente:

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

Dichiarazione di gerarchie nidificate all'interno della stessa risorsa XML utilizzando un &lt;PreferenceScreen&gt; non è più supportato. Usa oggetti Fragment nidificati .

Usa attività separate

In alternativa, se devi personalizzare notevolmente ogni schermo o vuoi Activity esegue le transizioni tra le schermate, puoi utilizzare un oggetto Activity separato per ogni PreferenceFragmentCompat. In questo modo, puoi personalizzare completamente Activity e la schermata delle impostazioni corrispondente. Per la maggior parte delle app, lo ha consigliato: usa Fragments come descritto in precedenza.

Per ulteriori informazioni sull'avvio di un Activity da un Preference, consulta Azioni di preferenza.