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()
.