Single page PreferenceActivity w / sin encabezados / fragmentos?
Estoy tratando de lograr algo que creo que es bastante fácil, pero estoy desconcertado sobre cómo lograrlo utilizando la clase PreferenceActivity y la etiqueta de encabezado de preferencia xml.
Cuando el usuario teclea el icono de configuración de la aplicación, me gustaría que se presentaran con una pequeña lista de casillas de verificación y listas. Sólo tengo un solo fragmento de preferencia. Hasta ahora puedo configurar los archivos xml de PreferenciaActividad (preferencias.xml y fragmentos de preferencia xmls) para mostrar el encabezado único del fragmento de preferencia. Cuando el usuario selecciona esa cabecera la pantalla de preferencias es exactamente como yo lo quiero, sin embargo, no puedo encontrar una forma de saltar mostrando la primera pantalla de encabezado.
- Mejores Prácticas para SharedPreferences
- SharedPreferences sobreescribe otro valor
- Preferencias independientes para cada vista en una aplicación para Android
- El campo de resumen de la etiqueta PreferenceCategory
- android: using ListPreference and retrieving key string
Parece un desperdicio tener que tocar el icono de configuración / preferencias, mostrar un solo encabezado que luego se pulsa para llegar a los ajustes / preferencias reales.
Entiendo cómo esto puede ser muy útil si desea categorizar sus preferencias, pero para algo simple, esto agrega sobrecarga y parece bastante torpe.
Espero que estuviera claro. En resumen aquí está mi pregunta:
¿Cuál es la nueva forma preferida de usar la clase PreferenceActivity y la etiqueta de encabezado de preferencias para mostrar simplemente una sola pantalla de opciones sin encabezado?
Después de mirar alrededor un poco más parece que estoy tratando de hacer lo que los métodos antiguos hicieron de una manera directa. Estoy tratando de hacer esto sin usar ninguna de las funciones obsoletas.
Gracias de antemano, B.
- ¿Cómo puedo usar el mismo conjunto de pantallas de preferencias para todas las versiones de Android de 2.X a 4.X?
- Cuándo usar CheckBox y cuando cambie
- Cómo llenar ListPreference dinámicamente cuando onPreferenceClick se dispara?
- EditTextPreference hace que Inflate Exception
- ¿Cómo obtengo la categoría de una preferencia de Android?
- ¿La mejor práctica para llevar el material a Preferencias usando AppCompat?
- Nombre en su lugar nombre de tono de llamada
- Preferencia y comprobación de la casilla de verificación si está activada o desactivada
La nueva forma preferida es mostrar un único PreferenceFragment
como el contenido principal de cualquier actividad. No necesita ser PreferenceActivity
. Consulte la muestra de demostración de APIs
public class FragmentPreferences extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Display the fragment as the main content. getFragmentManager().beginTransaction().replace(android.R.id.content, new PrefsFragment()).commit(); } public static class PrefsFragment extends PreferenceFragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Load the preferences from an XML resource addPreferencesFromResource(R.xml.preferences); } } }
Estaba buscando una respuesta que coincidiera con esta pregunta. Eventualmente, lo elaboré de varias otras fuentes. Para aquellos que aún quieren que responda, esto es lo que funcionó para mí. (Nota: tanto los SDK mínimos como los SDK objetivo se establecen en 15 en este proyecto).
- Deshágase de los jefes de preferencias, no los necesitará.
- Cree una pantalla de preferencias con la configuración de página única.
- Cree una clase de actividad de preferencias (SettingsActivity a continuación).
- Cree una clase en línea que extiende PreferenceFragment (LocationFragment a continuación).
- Defina la clase en el Manifiesto.
- Inicie la tarea: consulte el código de menú siguiente.
La clase de preferencia que muestra la pantalla de ajustes individuales.
public class SettingsActivity extends PreferenceActivity { private final static String TAG = "SettingsAcitivity"; public SettingsActivity() {} @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); MyLog.d(TAG, "onCreate"); getFragmentManager().beginTransaction() .replace(android.R.id.content, new LocationFragment()).commit(); } public class LocationFragment extends PreferenceFragment { private final static String TAG = "LocationFragment"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); MyLog.d(TAG, "onCreate"); addPreferencesFromResource(R.xml.locationsettings); } } }
El código para mostrar los ajustes:
@Override public boolean onOptionsItemSelected(MenuItem item) { MyLog.d(TAG, "onOptionsItemSelected"); switch (item.getItemId()) { case R.id.menu_main_help: break; case R.id.menu_main_about: break; case R.id.menu_main_settings: MyLog.d(TAG, "Settings"); Intent settingsIntent = new Intent(this, SettingsActivity.class); startActivity(settingsIntent); break; } return true; }
La tecla Atrás finaliza la ConfiguraciónActividad. Las rutinas de preferencia incorporadas guardan los cambios. La función onResume que tengo hace un getSettings () que actualiza cualquier configuración cambiada usada por la actividad que llama (MainActivity en este caso).
Eso es.
- Barra de Acción elemento de menú color del texto
- ¿Cómo puedo comprobar si el sistema es de 12 o 24 horas?