onattach - navegar entre fragments android studio
Alternativas a PreferenceFragment con android-support-v4 (9)
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;
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
<?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 algo para implementar algo que se asemeje a un Fragmento de preferencia (o actividad de preferencia) usando la biblioteca de compatibilidad android-support-v4?
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+
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 extender desde PreferenceActivity lugar, y si desea tener una ActionBar, puede agregarla usando una Toolbar 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 here .
Puede usar bibliotecas de terceros, como UnifiedPreferences para usar una única API para todas las versiones de Android.
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.
Sé que esta es una pregunta antigua, pero ahora puedes usar PreferenceFragmentCompat
desde com.android.support:preference-v7:23.3.0
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:
<style name="AppTheme" parent="@style/Theme.AppCompat.Light">
<item name="preferenceTheme">@style/PreferenceThemeOverlay</item>
</style>
Y agregue esto en dependencias: http://developer.android.com/tools/support-library/features.html
com.android.support:preference-v14:23.1.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''