@Garret Wilson Vielen Dank! Als Neuling in der Android-Programmierung habe ich mich stundenlang mit dem Problem der Inkompatibilität der Einstellungen herumgeschlagen, und ich finde es so enttäuschend, dass einige Methoden/Ansätze für neue, die von den älteren APIs nicht unterstützt werden, veraltet sind, so dass man auf alle möglichen Workarounds zurückgreifen muss, damit die App auf einer Vielzahl von Geräten funktioniert. Das ist wirklich frustrierend!
Ihre Klasse ist großartig, denn sie ermöglicht es Ihnen, in neuen APIs mit den Einstellungen zu arbeiten, wie es früher war, aber sie ist nicht abwärtskompatibel. Da ich versuche, eine breite Palette von Geräten zu erreichen, habe ich ein bisschen daran herumgebastelt, damit es sowohl in Geräten vor API 11 als auch in neueren APIs funktioniert:
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
}
}
}
Getestet in zwei Emulatoren (2.2 und 4.2) mit Erfolg.
Warum mein Code so beschissen aussieht:
Ich bin ein Neuling in der Android-Programmierung und nicht der größte Java-Fan.
Um die veraltete Warnung zu vermeiden und Eclipse zu zwingen, mich kompilieren zu lassen, musste ich auf Anmerkungen zurückgreifen, aber diese scheinen nur Klassen oder Methoden zu betreffen, also musste ich den Code in zwei neue Methoden verschieben, um davon zu profitieren.
Ich möchte nicht jedes Mal, wenn ich die Klasse für eine neue PreferenceActivity kopiere und einfüge, meine xml-Ressourcen-ID zweimal schreiben müssen, also habe ich eine neue Variable erstellt, um diesen Wert zu speichern.
Ich hoffe, dass dies für jemand anderen nützlich sein wird.
P.S.: Entschuldigen Sie bitte meine Meinung, aber wenn man neu ist und solche Nachteile vorfindet, kann man nicht anders, als frustriert zu sein!