Alternatives à PreferenceFragment avec android-support-v4

J’ai soudainement arrêté le développement de mon application, car je me suis rendu compte que PreferenceFragments n’était pas pris en charge dans cette bibliothèque. Y a-t-il des alternatives qu’un développeur Android novice peut utiliser pour surmonter cet obstacle?

Ceci est ma fenêtre principale dès maintenant

          

Pour mon TabActivity, j’utilise quelque chose que j’ai trouvé en ligne. Voici un extrait:

 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 Ssortingng tag; private Class clss; private Bundle args; private Fragment fragment; TabInfo(Ssortingng 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.Ssortingng) */ public View createTabContent(Ssortingng tag) { View v = new View(mContext); v.setMinimumWidth(0); v.setMinimumHeight(0); return v; } } ...*snip*... 

Est-il possible d’implémenter quelque chose qui ressemble à un fragment de préférence (ou preferenceActivity) en utilisant la bibliothèque de compatibilité android-support-v4?

MISE À JOUR – 6/11/2015

La bibliothèque Support-v7 inclut désormais PreferenceFragmentCompat . Ce sera donc une meilleure idée de l’utiliser.


Ajoutez le projet suivant en tant que projet de bibliothèque à votre application.

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

Vous pouvez tout garder, y compris votre transaction de fragment, telle quelle. Lors de l’importation de la classe PreferenceFragment , assurez-vous que l’en-tête d’importation correct est utilisateur.

 import android.support.v4.preference.PreferenceFragment; 

au lieu de

 import android.preference.PreferenceFragment; 

Je sais que c’est une vieille question, mais vous pouvez maintenant utiliser PreferenceFragmentCompat de com.android.support:preference-v7:23.3.0

Important Update: La dernière révision de la v7 support library a maintenant un PreferenceFragmentCompat natif.

J’utilise cette bibliothèque , qui a un AAR dans mavenCentral , vous pouvez donc facilement l’inclure si vous utilisez Gradle .

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

Vous pouvez utiliser mon propre PreferenceFragment .

C’est simple et je n’ai eu aucun problème avec ça jusqu’à présent. Je pense que vous ne pouvez en afficher qu’une à la fois dans une seule activité, ce qui devrait être correct.

Préférences Support Library: Fragments de préférences pour API 7+, quelle que soit l’activité

Une implémentation simple inclurait un PreferenceFragmentCompat tel que:

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

Vous devrez également définir la préférence Thème dans votre thème:

  

Et ajoutez ceci dans les dépendances: http://developer.android.com/tools/support-library/features.html

 com.android.support:preference-v14:23.1.0 

Vous pouvez peut-être utiliser une véritable activité et utiliser un fragment, mais je ne pense pas que ce soit un bon choix. Vous devez utiliser PreferenceActivity simple et attendre des améliorations dans les bibliothèques rétro.

Vous pouvez utiliser des bibliothèques tierces telles que UnifiedPreferences pour utiliser une seule API pour toutes les versions d’Android.

Vous pouvez étendre depuis PreferenceActivity , et si vous souhaitez avoir un ActionBar, vous pouvez l’append en utilisant une barre d’ outils au-dessus du ListView utilisé pour les préférences.

Cela peut être fait en utilisant un LinearLayout vertical qui contient la barre d’outils et un ListView avec Android: id = “@ android: id / list” .

Si vous le souhaitez, vous pouvez voir ma solution ici .

Comme Lucius l’a dit, vous pouvez utiliser PreferenceFragmentCompat :

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

Vous devez inclure sa dépendance dans gradle:

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

De cette façon, vous pouvez également utiliser FragmentTransaction de android.support.v4.app.FragmentTransaction et PrefernceFragment. Cependant, vous avez peut-être des problèmes avec les thèmes. Si c’est le cas, vous pouvez le résoudre en tenant compte de cet article:

Solution pour faire fonctionner la lib sur API 7+ tout en conservant le thème matériel sur API 14+