android preferences actionbarsherlock

android - Pantalla de preferencias usando ActionBar Sherlock



preferences actionbarsherlock (2)

Estoy haciendo una aplicación de Android usando ActionBarSherlock . Mi problema es para hacer la pantalla de preferencias. El método onBuildHeader() en la clase SherlockPreferenceActivity se llama nerver.

Este es mi codigo

preferences_headers.xml

<preference-headers xmlns:android="http://schemas.android.com/apk/res/android" > <header android:fragment="package.fragments.MyPreferenceFragment" android:icon="@drawable/bulle" android:summary="An example of some preferences." android:title="title" /> </preference-headers>

preferences.xml

<?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" android:title="@string/options" > <PreferenceCategory> <SwitchPreference android:id="@+id/cb_notif" android:defaultValue="false" android:key="com.vincent.HTC_Dev.pref.notif" android:summaryOff="@string/notifications_off" android:summaryOn="@string/notifications_on" android:title="@string/notifications" /> </PreferenceCategory> </PreferenceScreen>

MyPreferenceActivity

public class MyPreferenceActivity extends SherlockPreferenceActivity { @Override public void onBuildHeaders(List<Header> target) { super.onBuildHeaders(target); loadHeadersFromResource(R.xml.preference_headers, target); } }

MyPreferenceFragment

public class MyPreferenceFragment extends PreferenceFragment implements OnSharedPreferenceChangeListener { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preferences); getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this); } @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { // TODO Auto-generated method stub } }


Solo se llamará a onBuildHeaders () si está ejecutando en el nivel 11 de API o superior. Consulte github.com/commonsguy/cw-omnibus/tree/master/Prefs/FragmentsBC para ver un ejemplo de compatibilidad con PreferenceFragment en el nivel de API 11+ y preferencias clásicas en versiones anteriores de Android.
- CommonsWare 7 de junio de 12 a las 11:06

@CommonsWare, por favor, puede publicar esto mientras responde, así puedo eliminar esta copia de su respuesta.


onBuildHeaders() si está ejecutando en el nivel 11 de API o superior. En dispositivos más antiguos, vuelve al addPreferencesFromResource() clásico de addPreferencesFromResource() .

Vea este proyecto de muestra para obtener un ejemplo de compatibilidad con PreferenceFragment en API Level 11+ y preferencias clásicas en versiones anteriores de Android.

Específicamente, su SherlockFragmentActivity ve así:

package com.commonsware.android.preffragsbc; import java.util.List; import android.os.Build; import android.os.Bundle; import com.actionbarsherlock.app.SherlockPreferenceActivity; public class EditPreferences extends SherlockPreferenceActivity { @SuppressWarnings("deprecation") @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (Build.VERSION.SDK_INT<Build.VERSION_CODES.HONEYCOMB) { addPreferencesFromResource(R.xml.preferences); addPreferencesFromResource(R.xml.preferences2); } } @Override public void onBuildHeaders(List<Header> target) { loadHeadersFromResource(R.xml.preference_headers, target); } }

En onCreate() solo necesitamos hacer addPreferencesFromResource() si estamos en un dispositivo más antiguo. En este caso, mi muestra tiene dos encabezados de preferencia y, por lo tanto, dos archivos XML de preferencia, por lo que llamamos addPreferencesFromResource() en ambos. En dispositivos más nuevos, onCreate() no hace nada más que encadenar a la superclase, lo que desencadenará la llamada a onBuildHeaders() .