Agregar el botón a PreferenceScreen

No puedo averiguar cómo me gustaría ir sobre la aplicación de un botón de arriba en un PreferenceScreen . Un botón arriba muestra un cursor en la barra de acción junto al icono de la aplicación que le permite navegar por la jerarquía de la aplicación, más información aquí .

Tengo un fragmento de la preferencia que exhibe cuando mi actividad principal se abre y puedo conseguir el botón ascendente para exhibir agregando esta línea "getActionBar (). SetDisplayHomeAsUpEnabled (verdadero);":

  protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getActionBar().setDisplayHomeAsUpEnabled(true); getFragmentManager().beginTransaction() .replace(android.R.id.content, new SettingsFragment()) .commit(); 

Esto hace que el botón de arriba aparezca en el fragmento de preferencia, pero sólo quiero mostrar el botón de arriba cuando se abre uno de mis PreferenceScreens , lo que permite la navegación al principal PreferenceFragment .

Mi aplicación es análoga a la aplicación de configuración principal. Sólo las pantallas secundarias, como Acceso a la ubicación, que se abre desde la aplicación Configuración principal, tienen la flecha hacia arriba.

Introduzca aquí la descripción de la imagen

Si su aplicación completa es una pantalla de preferencias, puede hacer que su actividad principal sea una PreferenceActivity y los subniveles pueden ser fragmentos. De esta manera, la funcionalidad "arriba" va a ser por defecto lo que estás buscando.

De esta pregunta , simplemente agregé estos dos bloques de código a mi Fragmento de preferencia:

 @Override public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { super.onPreferenceTreeClick(preferenceScreen, preference); // If the user has clicked on a preference screen, set up the action bar if (preference instanceof PreferenceScreen) { initializeActionBar((PreferenceScreen) preference); } return false; } 

Y éste:

  /** Sets up the action bar for an {@link PreferenceScreen} */ public static void initializeActionBar(PreferenceScreen preferenceScreen) { final Dialog dialog = preferenceScreen.getDialog(); if (dialog != null) { // Inialize the action bar dialog.getActionBar().setDisplayHomeAsUpEnabled(true); // Apply custom home button area click listener to close the PreferenceScreen because PreferenceScreens are dialogs which swallow // events instead of passing to the activity // Related Issue: https://code.google.com/p/android/issues/detail?id=4611 View homeBtn = dialog.findViewById(android.R.id.home); if (homeBtn != null) { OnClickListener dismissDialogClickListener = new OnClickListener() { @Override public void onClick(View v) { dialog.dismiss(); } }; // Prepare yourselves for some hacky programming ViewParent homeBtnContainer = homeBtn.getParent(); // The home button is an ImageView inside a FrameLayout if (homeBtnContainer instanceof FrameLayout) { ViewGroup containerParent = (ViewGroup) homeBtnContainer.getParent(); if (containerParent instanceof LinearLayout) { // This view also contains the title text, set the whole view as clickable ((LinearLayout) containerParent).setOnClickListener(dismissDialogClickListener); } else { // Just set it on the home button ((FrameLayout) homeBtnContainer).setOnClickListener(dismissDialogClickListener); } } else { // The 'If all else fails' default case homeBtn.setOnClickListener(dismissDialogClickListener); } } } } 

Echa un vistazo a esto .

Para el XML:

 <Preference android:title="Acts like a button" android:key="button" android:summary="This will act like a button"/> 

Entonces para el Java en su onCreate()

 Preference button = (Preference)findPreference("button"); button.setOnPreferenceClickListener( new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference arg0) { //code for what you want it to do return true; } }); 
  • Java Realm obtiene el último elemento insertado
  • ¿Fuerza el androide para enviar paquetes UDP inmediatamente?
  • ¿Cómo verificar la tarjeta PAN?
  • La fusión de clips mp4 con mp4parser hace que el audio detrás del video
  • Java Floating Point Precision Issue
  • RoboGuice 3.0 NoClassDefFoundError: roboguice.inject.ContextScopedRoboInjector
  • FontMetrics no es correcto cuando se ejecuta en el dispositivo Android. Simulador bien
  • Android GPS tarda un tiempo en ser preciso
  • Ráfaga de captura de cámara de Android2 es demasiado lento
  • Android - Activación del bloqueo de teclas del sistema (también llamada pantalla de bloqueo)
  • Consumir API de intercambio de pilas
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.