android - preferencias - ¿Una sola página PreferenceActivity sin encabezados/fragmentos?
preference screen android studio (2)
Estoy tratando de lograr algo que creo que es bastante fácil, pero estoy desconcertado sobre cómo lograrlo usando la clase PreferenceActivity y la etiqueta xml preference-header.
Cuando el usuario toca el ícono de configuración de la aplicación, me gustaría que se le presente una pequeña lista de casillas de verificación y listas. Solo tengo un fragmento de preferencia único. Hasta ahora puedo configurar los archivos PreferenceActivity xml (preferences.xml, y los fragmentos de preferencia xmls) para mostrar el único encabezado para el fragmento de preferencia. Cuando el usuario selecciona ese encabezado, la pantalla de preferencias es exactamente como la quiero, sin embargo, no puedo encontrar una manera de omitir la primera pantalla de encabezado.
Parece un desperdicio tener que tocar el icono de configuración / preferencias, mostrar un solo encabezado que luego se toca para acceder a las configuraciones / preferencias reales.
Entiendo que esto puede ser muy útil si quiere categorizar sus preferencias, pero por algo simple, esto agrega sobrecarga y parece bastante torpe.
Espero haber sido claro. En resumen, esta es mi pregunta:
¿Cuál es la nueva forma preferida de utilizar la clase PreferenceActivity y la etiqueta de encabezado de preferencia para mostrar simplemente una sola pantalla de opciones sin encabezado?
Después de mirar un poco más, parece que estoy tratando de hacer lo que los métodos más antiguos hicieron de una manera directa. Estoy tratando de hacer esto sin usar ninguna de las funciones en desuso.
Gracias de antemano, B.
Estaba buscando una respuesta que coincidiera con esta pregunta. Finalmente, lo resolví de varias otras fuentes. Para aquellos que aún quieran que se responda, esto es lo que funcionó para mí. (Nota: los SDK mínimo y objetivo se establecen en 15 en este proyecto).
- Vuelca los PreferenceHeaders, no los necesitarás.
- Crea una pantalla de preferencias con la configuración de una sola página.
- Cree una clase de actividad de preferencia (ConfiguraciónActividad a continuación).
- Cree una clase en línea que amplíe PreferenceFragment (LocationFragment a continuación).
- Defina la clase en el Manifiesto.
- Comience la tarea - vea el código de menú a continuación.
La clase de preferencia que muestra la pantalla de configuración única.
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 la Configuración:
@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 creadas en preferencia guardan cualquier cambio. La función onResume que tengo hace un getSettings () que actualiza cualquier configuración modificada utilizada por la actividad de llamada (MainActivity en este caso).
Eso es.
La nueva forma preferida es mostrar un solo PreferenceFragment
como el contenido principal de cualquier actividad. No necesita ser PreferenceActivity
. Ver la muestra de demostración de API
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);
}
}
}