Alternativas a PreferenceFragment con android-support-v4

Me he detenido repentinamente en el desarrollo de mi aplicación cuando me di cuenta de que los Fragmentos de Preferencias no eran compatibles en esta biblioteca. ¿Hay alguna alternativa que un desarrollador novato de Android pueda usar para superar este obstáculo?

Esta es mi ventana principal a partir de ahora

          

Para mi TabActivity estoy usando algo que encontré en línea. Aquí hay un fragmento:

 public class TabControlActivity extends FragmentActivity implements TabHost.OnTabChangeListener { public static final int INSERT_ID = Menu.FIRST; public static TabControlActivity thisCtx; private TabHost mTabHost; private HashMap mapTabInfo = new HashMap(); private TabInfo mLastTab = null; private class TabInfo { private String tag; private Class clss; private Bundle args; private Fragment fragment; TabInfo(String tag, Class clazz, Bundle args) { this.tag = tag; this.clss = clazz; this.args = args; } } class TabFactory implements TabContentFactory { private final Context mContext; /** * @param context */ public TabFactory(Context context) { mContext = context; } /** (non-Javadoc) * @see android.widget.TabHost.TabContentFactory#createTabContent(java.lang.String) */ public View createTabContent(String tag) { View v = new View(mContext); v.setMinimumWidth(0); v.setMinimumHeight(0); return v; } } ...*snip*... 

¿Hay algo para implementar algo que se asemeje a un Fragmento de preferencia (o actividad de preferencia) usando la biblioteca de compatibilidad android-support-v4?

ACTUALIZACIÓN – 6/11/2015

La biblioteca Support-v7 ahora incluye PreferenceFragmentCompat . Entonces será una mejor idea usarlo.


Agregue el siguiente proyecto como proyecto de biblioteca a su aplicación.

https://github.com/kolavar/android-support-v4-preferencefragment

Puedes mantener todo incluido tu fragmento de transacción tal como está. Al importar la clase PreferenceFragment , asegúrese de que el encabezado de importación correcto sea user.

 import android.support.v4.preference.PreferenceFragment; 

en lugar de

 import android.preference.PreferenceFragment; 

Sé que esta es una pregunta antigua, pero ahora puedes usar PreferenceFragmentCompat desde com.android.support:preference-v7:23.3.0

Actualización importante: la última revisión de la v7 support library ahora tiene un PreferenceFragmentCompat nativo.

Estoy usando esta biblioteca , que tiene un AAR en mavenCentral para que pueda incluirlo fácilmente si está usando Gradle .

compile 'com.github.machinarius:preferencefragment:0.1.1'

Puedes usar mi propio PreferenceFragment .

Es simple y no tuve problemas con eso hasta ahora. Creo que solo puede mostrar uno de ellos a la vez en una sola actividad, lo que debería ser correcto.

Biblioteca de soporte de preferencias: Fragmentos de preferencia para API 7+, sin importar la actividad

Una implementación simple incluiría un PreferenceFragmentCompat como:

 public class PreferencesFragment extends PreferenceFragmentCompat { @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { addPreferencesFromResource(R.xml.preferences); } } 

También deberá establecer preferenceTheme en su tema:

  

Y agregue esto en dependencias: http://developer.android.com/tools/support-library/features.html

 com.android.support:preference-v14:23.1.0 

Podrías usar una actividad real y usar fragmentos, pero no creo que sea una buena opción. Debería usar PreferenceActivity simple y esperar mejoras en las librerías de compatibilidad retro.

Puede usar bibliotecas de terceros, como UnifiedPreferences, para usar una única API para todas las versiones de Android.

Puede extender desde PreferenceActivity en su lugar, y si desea tener una ActionBar, puede agregarla usando una barra de herramientas como superior al ListView utilizado para las preferencias.

Esto se puede hacer utilizando un LinearLayout vertical que contiene la barra de herramientas y un ListView con Android: id = “@ android: id / list” .

Si lo desea, puede ver mi solución aquí .

Como Lucius dijo, puedes usar PreferenceFragmentCompat :

 public class MyPreferenceFragment extends PreferenceFragmentCompat { @Override public void onCreatePreferences(Bundle bundle, String s) { PreferenceManager.setDefaultValues(getActivity(), R.xml.preferences, false); addPreferencesFromResource(R.xml.preferences); } } 

Debe incluir su dependencia en gradle:

 dependencies { ... compile 'com.android.support:preference-v7:23.1.X' (wherX = 0,1,...) ... } 

De esta manera también puede usar FragmentTransaction de android.support.v4.app.FragmentTransaction y PrefernceFragment. Sin embargo, quizás tengas problemas con los temas. Si es el caso, puedes resolverlo teniendo en cuenta esta publicación:

Solución para hacer que la lib trabaje en API 7+ mientras se mantiene el tema material en la API 14+