Je suis venu à un arrêt soudain dans le développement de mon application car j'ai réalisé que PreferenceFragments n'était pas pris en charge dans cette bibliothèque. Existe-t-il des alternatives qu'un développeur Android débutant peut utiliser pour surmonter cet obstacle?
Ceci est ma fenêtre principale à partir de maintenant
<?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>
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 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*...
Y a-t-il quelque chose à mettre en œuvre qui ressemble à un fragment de préférence (ou préférenceActivity) à l'aide de la bibliothèque de compatibilité android-support-v4?
android
android-fragments
CodePrimate
la source
la source
PreferenceFragmentCompat
a été récemment ajouté à la bibliothèque de support.Réponses:
MISE À JOUR - 6/11/2015
La bibliothèque Support-v7 comprend 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 tel quel, y compris votre transaction fragmentée. Lors de l'importation de la
PreferenceFragment
classe, assurez-vous que l'en-tête d'importation correct est user.au lieu de
la source
RingtonePreference
etOnSharedPreferenceChangeListener
ne semble pas non plus avoir de changements!onPrepareOptionMenu
méthode me montre une signature étrange (retournevoid
) différente de celle par défaut que nous connaissons tous (retourneboolean
) !!! un problème grave.Je sais que c'est une vieille question, mais vous pouvez maintenant utiliser à
PreferenceFragmentCompat
partir decom.android.support:preference-v7:23.3.0
la source
PreferenceFragmentCompat
a des problèmes majeurs: voir ceci et ce rapport de bogue, par exemple, et bien d'autres ici . J'ai fini par utiliser le obsolète à laPreferenceActivity
place. soupirMise à jour importante: la dernière révision du
v7 support library
a désormais un PreferenceFragmentCompat natif .J'utilise cette bibliothèque , qui a un
AAR
inmavenCentral
afin que vous puissiez facilement l'inclure si vous utilisezGradle
.compile 'com.github.machinarius:preferencefragment:0.1.1'
la source
Vous pouvez utiliser le mien
PreferenceFragment
.C'est simple et je n'ai eu aucun problème avec ça jusqu'à présent. Je pense que vous ne pouvez afficher qu'un seul d'entre eux à la fois dans une seule activité, ce qui devrait être OK.
la source
Bibliothèque de prise en charge des préférences: Fragments de préférence pour API 7+, quelle que soit l'activité
Une implémentation simple inclurait un PreferenceFragmentCompat tel que:
Vous devrez également définir le thème de préférence dans votre thème:
Et ajoutez ceci dans les dépendances: http://developer.android.com/tools/support-library/features.html
la source
Vous pouvez peut-être utiliser une activité réelle 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 de compatibilité rétro.
la source
Vous pouvez utiliser des bibliothèques tierces telles que UnifiedPreferences pour utiliser une seule API pour toutes les versions d'Android.
la source
Vous pouvez étendre à partir de PreferenceActivity à la place, et si vous souhaitez avoir une ActionBar, vous pouvez l'ajouter en utilisant une Toolbar comme étant au-dessus de la ListView utilisée 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 .
la source
Comme Lucius l'a dit, vous pouvez utiliser PreferenceFragmentCompat :
Vous devez inclure sa dépendance dans gradle:
De cette façon, vous pouvez également utiliser FragmentTransaction de android.support.v4.app.FragmentTransaction et PrefernceFragment. Cependant, vous rencontrez peut-être des problèmes avec les thèmes. Si c'est le cas, vous pouvez le résoudre en tenant compte de ce post:
Solution pour faire fonctionner la bibliothèque sur API 7+ tout en conservant le thème matériel sur API 14+
la source