Android: cómo abrir un cuadro de diálogo ListPreference desde fuera de PreferenceActivity / PreferenceFragment?

He creado un menú de configuración para mi aplicación basado en PreferenceFragment y me gustaría acceder a los cuadros de diálogo de configuración desde cualquier lugar de la aplicación sin tener que abrir el menú de configuración.

Mi menú de configuración tiene esto:

Menú de ajustes

Y quiero mostrar el mismo diálogo cuando hago clic en este elemento de menú de la actividad principal:

actividad principal

La Activity principal tiene un ListFragment que es donde está todo el código de manejo de UI. Tampoco es una PreferenceActivity o PreferenceFragment .

Sólo quiero invocar el mismo objeto PreferenceFragment para llegar al diálogo, de lo contrario tendría que escribir código personalizado para manejar los cambios de preferencia manualmente, que me gustaría evitar.

Pensé que agregar el PreferenceFragment al FragmentManager en la Activity principal lo instanciaría correctamente, pero no parece funcionar.

Desde el código de mi manejador de menús para la opción "Ordenar":

  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) 

Esto se bloquea con una NullPointerException en listPref , que muestra que el PreferenceFragment no se inicializó correctamente.

¿Hay alguna manera de lograr este efecto, o tengo que escribir la funcionalidad como un AlertDialog y manejar manualmente los cambios de preferencia?

Creo que tendrás que escribir esta funcionalidad tú mismo fuera de las clases de Preferencias.

Preferencia, PreferenceActivity y PreferenceFragment fueron diseñados para trabajar juntos para proporcionar un UIX consistente para aplicaciones de Android. Como tal, se recomienda utilizarlos juntos, ya que estaban destinados.

No puede replicar directamente la interfaz de usuario de PreferenceActivity o PreferenceFragment fuera de esas dos clases en una actividad regular porque la interfaz de usuario se construye a partir de objetos de preferencia y no de objetos View como Actividades regulares. Así que si usted quiere que la interfaz de usuario en particular que tendría que tratar de duplicar el uso de vistas personalizadas.

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

  • ¿PreferenceFragment con el fondo transparente?
  • ¿Cuál es la diferencia entre TypedArray.getInteger () y TypedArray.getInt ()?
  • ¿Cómo puedo crear preferencias personalizadas usando la biblioteca android.support.v7.preference?
  • Usar NOT lógico con android: dependencia de preferencias
  • Iniciar ubicación Configuración intento de preferencias Archivo XML
  • ¿Cómo agregar un "oyente de clic largo" a una preferencia?
  • Establecer indicadores de intención para PreferenceScreen en xml
  • ¿Cómo obtener preferencias de tono en tiempo de ejecución?
  • ¿Cómo puedo activar una preferencia en mi aplicación Android cuando otra preferencia está desactivada?
  • Obtener la vista de preferencias personalizadas
  • PreferenceScreen personalizado con botones pulsables
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.