@Garret Wilson Cảm ơn bạn rất nhiều! Là một người không biết gì về mã hóa Android, tôi đã bị mắc kẹt với vấn đề không tương thích về sở thích trong nhiều giờ và tôi thấy thật đáng thất vọng khi họ không tán thành việc sử dụng một số phương pháp / phương pháp cho các phương pháp mới không được API cũ hỗ trợ phải dùng đến tất cả các cách giải quyết để làm cho ứng dụng của bạn hoạt động trong một loạt các thiết bị. Thật là bực bội!
Lớp học của bạn rất tuyệt, vì nó cho phép bạn tiếp tục làm việc trong các API mới với các tùy chọn như trước đây, nhưng nó không tương thích ngược. Vì tôi đang cố gắng tiếp cận một loạt các thiết bị, tôi đã sửa đổi nó một chút để làm cho nó hoạt động trong các thiết bị API 11 trước cũng như trong các API mới hơn:
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
}
}
}
Đã thử nghiệm trong hai trình giả lập (2.2 và 4.2) với thành công.
Tại sao mã của tôi trông rất nhảm nhí:
Tôi là một người không biết gì về mã hóa Android và tôi không phải là người hâm mộ java tuyệt vời nhất.
Để tránh cảnh báo không dùng nữa và buộc Eclipse phải cho phép tôi biên dịch, tôi đã phải dùng đến các chú thích, nhưng dường như chúng chỉ ảnh hưởng đến các lớp hoặc phương thức, vì vậy tôi phải chuyển mã sang hai phương thức mới để tận dụng lợi thế này.
Tôi không muốn phải viết id tài nguyên xml của mình hai lần bất cứ khi nào tôi sao chép và dán lớp cho PreferenceActivity mới, vì vậy tôi đã tạo một biến mới để lưu trữ giá trị này.
Tôi hy vọng điều này sẽ hữu ích cho người khác.
Tái bút: Xin lỗi vì những quan điểm đầy quan điểm của tôi, nhưng khi bạn đến mới và tìm thấy những khuyết tật như vậy, bạn không thể làm gì ngoài việc nản lòng!