@Garret Wilson Merci beaucoup! Comme un noob pour android codage, j'ai été coincé avec les préférences de problème d'incompatibilité pendant de nombreuses heures, et je trouve ça tellement décevant qu'ils obsolète l'utilisation de certaines méthodes/approches pour les nouveaux qui ne sont pas pris en charge par l'ancienne Api ainsi d'avoir à recourir à toutes sortes de solutions pour faire de votre application de fonctionner dans une large gamme d'appareils. C'est vraiment frustrant!
Votre classe est grande, car il permet de continuer à travailler dans la nouvelle Api à l'aide des préférences de la façon dont il l'habitude d'être, mais il n'est pas rétro-compatible. Depuis que je suis en train d'essayer de parvenir à un large éventail de périphériques, j'ai bricolé un peu pour le faire fonctionner en pré API 11 appareils ainsi que dans les nouvelles Api:
import android.annotation.TargetApi;
import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.preference.PreferenceFragment;
public class MyPrefsActivity extends PreferenceActivity
{
private static int prefs=R.xml.myprefs;
@Override
protected void onCreate(final Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
try {
getClass().getMethod("getFragmentManager");
AddResourceApi11AndGreater();
} catch (NoSuchMethodException e) { //Api < 11
AddResourceApiLessThan11();
}
}
@SuppressWarnings("deprecation")
protected void AddResourceApiLessThan11()
{
addPreferencesFromResource(prefs);
}
@TargetApi(11)
protected void AddResourceApi11AndGreater()
{
getFragmentManager().beginTransaction().replace(android.R.id.content,
new PF()).commit();
}
@TargetApi(11)
public static class PF extends PreferenceFragment
{
@Override
public void onCreate(final Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
addPreferencesFromResource(MyPrefsActivity.prefs); //outer class
// private members seem to be visible for inner class, and
// making it static made things so much easier
}
}
}
Testé dans deux émulateurs (2.2 et 4.2) avec succès.
Pourquoi mon code ressemble tellement merdique:
Je suis un noob de android de codage, et je ne suis pas le plus grand java ventilateur.
Afin d'éviter le obsolète avertissement et à la force de l'Éclipse pour me permettre de compiler, j'ai dû recourir à des annotations, mais il semble affecter que des classes ou des méthodes, de sorte que j'ai dû passer le code sur deux nouvelles méthodes pour profiter de cette.
Je ne voudrais pas avoir à écrire mon xml id de ressource à deux fois quand je copie et colle la classe pour une nouvelle PreferenceActivity, j'ai donc créé une nouvelle variable pour stocker cette valeur.
J'espère que ce sera utile à quelqu'un d'autre.
P. S.: Désolé pour mes opinions points de vue, mais quand vous venez de nouvelles et de trouver ces handicaps, vous ne pouvez pas aider, mais pour aller à la frustration!