@Gretret Wilson Çok teşekkür ederim! Android kodlama için bir noob olarak, saatlerce tercihler uyumsuzluk sorunuyla sıkıştım ve eski API'lar tarafından desteklenmeyen yeni yöntemler için bazı yöntemlerin / yaklaşımların kullanılmasını onaylamadım. uygulamanızın çok çeşitli cihazlarda çalışmasını sağlamak için her türlü geçici çözüme başvurmanız gerekir. Gerçekten sinir bozucu!
Sınıfınız harika, çünkü eskisi gibi yeni API'larda çalışmaya devam etmenizi sağlıyor, ancak geriye dönük uyumlu değil. Çok çeşitli cihazlara ulaşmaya çalıştığımdan, API 11 öncesi cihazlarda ve yeni API'larda çalışmasını sağlamak için biraz uğraştım:
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
}
}
}
İki emülatörde (2.2 ve 4.2) başarıyla test edilmiştir.
Kodum neden bu kadar berbat görünüyor:
Ben android kodlama için bir noob ve en büyük java hayranı değilim.
Kullanımdan kaldırılmış uyarıyı önlemek ve Eclipse'i derlememe izin vermeye zorlamak için ek açıklamalara başvurmak zorunda kaldım, ancak bunlar sadece sınıfları veya yöntemleri etkiliyor gibi görünüyor, bu yüzden bundan yararlanmak için kodu iki yeni yönteme taşımak zorunda kaldım.
Ben yeni bir PreferenceActivity için sınıf kopyalamak ve yapıştırmak her zaman iki kez benim xml kaynak kimliğini yazmak zorunda kalmak istemiyorum, bu yüzden bu değeri depolamak için yeni bir değişken yarattı.
Umarım bu başka birisi için faydalı olacaktır.
Not: Düşünülen görüşlerim için özür dilerim, ancak yeni geldiğinizde ve böyle handikaplar bulduğunuzda, yardım edemezsiniz, ancak sinirli olmak için!