@ Garret Wilson Vielen Dank! Als Neuling in der Android-Codierung habe ich mich so viele Stunden lang mit dem Problem der Inkompatibilität von Einstellungen beschäftigt, und ich finde es so enttäuschend, dass die Verwendung einiger Methoden / Ansätze für neue Methoden, die von den älteren APIs nicht unterstützt werden, abgelehnt wurde Sie müssen auf alle möglichen Problemumgehungen zurückgreifen, damit Ihre App auf einer Vielzahl von Geräten funktioniert. Es ist wirklich frustrierend!
Ihre Klasse ist großartig, denn Sie können weiterhin in neuen APIs mit Einstellungen arbeiten, wie sie früher waren, aber sie ist nicht abwärtskompatibel. Da ich versuche, eine breite Palette von Geräten zu erreichen, habe ich ein wenig daran herumgebastelt, damit es sowohl auf 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
}
}
}
Mit Erfolg in zwei Emulatoren (2.2 und 4.2) getestet.
Warum mein Code so beschissen aussieht:
Ich bin ein Neuling in der Android-Codierung und ich bin nicht der größte Java-Fan.
Um die veraltete Warnung zu vermeiden und Eclipse zum Kompilieren zu zwingen, musste ich auf Anmerkungen zurückgreifen, die jedoch nur Klassen oder Methoden betreffen. Daher musste ich den Code auf zwei neue Methoden verschieben, um dies zu nutzen.
Ich möchte meine XML-Ressourcen-ID nicht zweimal schreiben müssen, wenn ich die Klasse für eine neue PreferenceActivity kopiere und einfüge. Daher habe ich eine neue Variable zum Speichern dieses Werts erstellt.
Ich hoffe, dass dies jemand anderem nützlich sein wird.
PS: Entschuldigen Sie meine Meinung, aber wenn Sie neu kommen und solche Nachteile finden, können Sie nicht anders, als frustriert zu werden!