2012-07-06 37 views
6

Chỉ các phím CheckboxPreference có android: defaultValue = "true" mới được hiển thị trong mã bên dưới. Vì vậy, không có khóa nào có defaultValue = "false" được hiển thị. Làm cách nào để có danh sách tất cả các khóa trong tệp tùy chọn của tôi?SharedPreferences.getAll() không có khóa tùy chọn sai. Làm thế nào để lấy tất cả các khóa?

PreferenceManager.setDefaultValues(this,R.xml.settings,true); //readAgain=false is same result 
     SharedPreferences prefs=PreferenceManager.getDefaultSharedPreferences(this); 
     Map<String, ?> prefMap=prefs.getAll(); 
     for(String key:prefMap.keySet()) { 
      Log.d("preference key=",key); //only keys with true are shown 
     } 
    } 

Theo các tài liệu GetAll() nên: "Lấy tất cả các giá trị từ các ưu đãi." Tuy nhiên, dường như chỉ nhận được các khóa có giá trị mặc định = true trừ khi người dùng đã đặt tùy chọn sau này.

EDIT: This is likely related to Android Bug: 6441, nhưng không cung cấp cho tôi giải pháp để nhận tất cả các khóa.

+1

Nếu nó không có một giá trị mặc định và không có giá trị sử dụng thì nó không có trong chia sẻ sở thích. nếu bạn muốn tất cả các tùy chọn được xác định, có thể bạn nên lặp lại tệp xml tùy chọn của mình. – Ran

+0

@ Ran-> Các tùy chọn này có android: defaultValue = false, vì vậy đó là một giá trị. – Fraggle

Trả lời

0

Bạn có thể truy cập tất cả các ưu đãi như sau (tôi sử dụng nó để bật/tắt tất cả các sở thích):

final ListAdapter adapter = getPreferenceScreen().getRootAdapter(); 
    for (int i = 0; i < adapter.getCount(); i++) { 
     Object object = adapter.getItem(i); 
     if(object instanceof Preference){ 
      ((Preference)object).setEnabled(state); // state -> my own variable 
     } 
    } 
Các vấn đề liên quan