2014-06-25 12 views
5

Ho creato un menu di impostazioni per la mia app in base a PreferenceFragment e desidero accedere alle finestre di impostazioni da altrove nell'app senza dover aprire il menu delle impostazioni.Android: come aprire una finestra di dialogo ListPreference dall'esterno PreferenceActivity/PreferenceFragment?

Il mio menu delle impostazioni ha questo:

settings menu

e voglio mostrare la stessa finestra di dialogo quando si fa clic questa voce di menu dalla principale attività:

main activity

Il principale Activity ha uno ListFragment che è dove tutto il codice di gestione dell'interfaccia utente è. Né è un PreferenceActivity o PreferenceFragment.

Voglio solo invocare lo stesso oggetto PreferenceFragment per accedere alla finestra di dialogo, altrimenti dovrei scrivere codice personalizzato per gestire le modifiche delle preferenze manualmente, che vorrei evitare.

Ho pensato di aggiungere allo FragmentManager nel Activity principale in modo appropriato, ma non sembra funzionare.

Dal mio menù codice del gestore per l'opzione "Sort":

SettingsFragment fragment = (SettingsFragment) getFragmentManager().findFragmentByTag(SettingsActivity.FRAGMENT_TAG); 

    // first run case 
    if (fragment == null) { 
     fragment = SettingsFragment.newInstance(getActivity()); 
     getFragmentManager().beginTransaction().add(fragment, SettingsActivity.FRAGMENT_TAG).commit(); 
    } 

    CustomListPreference listPref = (CustomListPreference) fragment.findPreference(SettingsFragment.KEY_PREF_SORTORDER); 
    listPref.show(); // invokes showDialog(null) 

Questo blocca con un NullPointerException su listPref, che mostra la PreferenceFragment non era correttamente inizializzato.

Esiste un modo per ottenere questo effetto oppure devo scrivere la funzionalità come AlertDialog e gestire manualmente le modifiche delle preferenze?

risposta

1

Penso che dovrete scrivere questa funzionalità da soli al di fuori delle classi di preferenza.

Preferenze, PreferenceActivity e PreferenceFragment erano tutti progettati per lavorare insieme per fornire un'UIX coerente per Android applicazioni. Come tale è consigliabile utilizzarli insieme così come lo erano .

Non è possibile replicare direttamente l'interfaccia utente di PreferenceActivity o PreferenceFragment al di fuori di queste due classi in un'attività regolare perché l'interfaccia utente è costruito da oggetti di preferenza, non Visualizza oggetti come attività regolari. Quindi, se vuoi quella particolare interfaccia utente, devi provare a duplicarla usando le viste personalizzate.

https://discussions.udacity.com/t/way-to-do-listpreference-outside-of-settings-menu/45473