@ Garret Wilson Terima kasih banyak! Sebagai noob untuk pengkodean android, saya telah terjebak dengan masalah ketidakcocokan preferensi selama berjam-jam, dan saya merasa sangat mengecewakan mereka mencela penggunaan beberapa metode / pendekatan untuk yang baru yang tidak didukung oleh API yang lebih lama sehingga harus menggunakan segala macam solusi untuk membuat aplikasi Anda berfungsi dalam berbagai perangkat. Benar-benar membuat frustrasi!
Kelas Anda sangat bagus, karena memungkinkan Anda untuk tetap bekerja di API baru dengan preferensi seperti dulu, tetapi tidak kompatibel ke belakang. Karena saya mencoba menjangkau berbagai perangkat, saya bermain-main sedikit untuk membuatnya berfungsi di pra-API 11 perangkat serta di API yang lebih baru:
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
}
}
}
Diuji dalam dua emulator (2.2 dan 4.2) dengan sukses.
Mengapa kode saya terlihat sangat jelek:
Saya noob untuk coding Android, dan saya bukan penggemar java terbesar.
Untuk menghindari peringatan yang sudah usang dan memaksa Eclipse untuk mengizinkan saya mengkompilasi, saya harus menggunakan anotasi, tetapi ini tampaknya hanya memengaruhi kelas atau metode, jadi saya harus memindahkan kode ke dua metode baru untuk memanfaatkan ini.
Saya tidak ingin menulis id sumber daya xml saya dua kali kapan saja saya menyalin & menempelkan kelas untuk PreferenceActivity baru, jadi saya membuat variabel baru untuk menyimpan nilai ini.
Saya harap ini akan bermanfaat bagi orang lain.
PS: Maaf atas pandangan saya yang berpendapat, tetapi ketika Anda datang baru dan menemukan cacat seperti itu, Anda tidak bisa menahan diri untuk frustrasi!