Me detuve repentinamente en el desarrollo de mi aplicación cuando me di cuenta de que PreferenceFragments no era compatible con esta biblioteca. ¿Existe alguna alternativa que un desarrollador de Android novato pueda utilizar para superar este obstáculo?
Esta es mi ventana principal a partir de ahora
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TabHost
android:id="@android:id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="0"/>
<FrameLayout
android:id="@+android:id/realtabcontent"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"/>
</LinearLayout>
<TabWidget
android:id="@android:id/tabs"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="0"
/>
</TabHost>
</LinearLayout>
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 alguno para implementar algo que se parezca a un fragmento de preferencia (o actividad de preferencia) usando la biblioteca de compatibilidad android-support-v4?
android
android-fragments
CodePrimate
fuente
fuente
PreferenceFragmentCompat
se agregó recientemente a la biblioteca de soporte.Respuestas:
ACTUALIZACIÓN - 6/11/2015
La biblioteca Support-v7 ahora incluye archivos
PreferenceFragmentCompat
. Entonces será una mejor idea usarlo.Agregue el siguiente proyecto como un proyecto de biblioteca a su aplicación.
https://github.com/kolavar/android-support-v4-preferencefragment
Puede mantener todo, incluida la transacción de fragmentos, tal como está. Al importar la
PreferenceFragment
clase, asegúrese de que el encabezado de importación correcto sea user.en vez de
fuente
RingtonePreference
yOnSharedPreferenceChangeListener
tampoco parece recibir ningún cambio!onPrepareOptionMenu
método me muestra una firma extraña (devuelvevoid
) diferente a la predeterminada que todos conocemos (devuelveboolean
)! un problema serio.Sé que esta es una pregunta antigua, pero ahora puedes usar
PreferenceFragmentCompat
decom.android.support:preference-v7:23.3.0
fuente
PreferenceFragmentCompat
tiene algunos problemas importantes: vea este y este informe de error, por ejemplo, y muchos más aquí . Terminé usando el obsoleto en suPreferenceActivity
lugar. suspiroActualización importante: la última revisión de
v7 support library
ahora tiene un PreferenceFragmentCompat nativo .Estoy utilizando esta biblioteca , que tiene una
AAR
enmavenCentral
lo que puede incluir fácilmente si está utilizandoGradle
.compile 'com.github.machinarius:preferencefragment:0.1.1'
fuente
Puedes usar el mío
PreferenceFragment
.Es simple y no he tenido problemas con él hasta ahora. Creo que solo puede mostrar uno de ellos a la vez en una sola actividad, lo que debería estar bien.
fuente
Biblioteca de soporte de preferencias: fragmentos de preferencias para API 7+, sin importar la actividad
Una implementación simple incluiría un PreferenceFragmentCompat como:
También necesitará establecer preferenciaTheme en su tema:
Y agregue esto en dependencias: http://developer.android.com/tools/support-library/features.html
fuente
Quizás puedas usar una actividad real y usar un fragmento, pero no creo que sea una buena opción. Debe usar PreferenceActivity simple y esperar mejoras en las bibliotecas de compatibilidad retro.
fuente
Puede utilizar bibliotecas de terceros, como UnifiedPreferences, para utilizar una única API para todas las versiones de Android.
fuente
En su lugar, puede extender desde PreferenceActivity , y si desea tener una ActionBar, puede agregarla usando una barra de herramientas por encima de ListView usado para las preferencias.
Esto se puede hacer usando 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í .
fuente
Como dijo Lucius, puede usar PreferenceFragmentCompat :
Debes incluir su dependencia en gradle:
De esta forma, también puede utilizar FragmentTransaction de android.support.v4.app.FragmentTransaction y PrefernceFragment. Sin embargo, es posible que tenga problemas con los temas. Si es el caso, puedes solucionarlo teniendo en cuenta este post:
Solución para hacer que la biblioteca funcione en API 7+ mientras se mantiene el tema del material en API 14+
fuente