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:
e voglio mostrare la stessa finestra di dialogo quando si fa clic questa voce di menu dalla principale attività:
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?