6

Tôi đang sử dụng PreferenceManager.setDefaultValues(context,R.xml.preferences,false) để đặt giá trị mặc định của tùy chọn trong ứng dụng và tôi nhận thấy rằng nếu tôi thêm tùy chọn mới thì PreferenceFragment không hiển thị giá trị mặc định cho nó , ngay cả khi được đặt trong các tuỳ chọn preferences.xml ..PreferenceManager.setDefaultValues ​​readAgain tham số và tùy chọn mới

Đây có phải là do tôi chỉ định readAgain là sai?

Tôi biết mình có thể thử và xem, nhưng tôi chỉ muốn chắc chắn rằng readAgain có nghĩa là cho mục đích này, tức là đọc lại các giá trị mặc định không đặt lại cài đặt người dùng mà phải đặt giá trị mặc định của thuộc tính mới. Nếu đây chính xác là mục đích của cờ readAgain, thì bạn có thể cho tôi lý do không phải lúc nào cũng đặt readAgain thành true, vì nó không đặt lại tùy chọn của người dùng?

Trả lời

4

Đặt cờ readagain thành true sẽ đảm bảo rằng tất cả các giá trị mặc định chưa đặt được đặt lại. Đó là tóm tắt.

Đặt readagain sẽ gây thêm phí trên vì về cơ bản nó có nghĩa là, mã sẽ trải qua toàn bộ SharedPreference một lần nữa để kiểm tra chúng. Với sai số readAgain, tất cả những gì cần làm là kiểm tra xem tệp (has_set_default_values.xml) được sử dụng làm điểm đánh dấu để đặt giá trị mặc định có hiện diện hay không.

Trong mọi trường hợp, nó sẽ không đặt bất kỳ giá trị nào đã được đặt.

+0

Tôi nghĩ về chi phí có thể ... Tôi có ít hơn 10 tùy chọn nên không phải là vấn đề .. Có cách nào khác để theo dõi nếu tùy chọn mới được thêm vào và buộc tải lại tùy chọn chỉ trong sự kiện đó không? Ví dụ: tôi có thể hiểu khi nào một ứng dụng được khởi chạy lần đầu tiên sau khi được cập nhật không? Có lẽ tôi có thể sử dụng một sở thích như * last_version_seen * và kiểm tra nó khi ứng dụng được bắt đầu với phiên bản hiện tại và kích hoạt các tùy chọn tải lại với * readAgain * được đặt thành true, đúng không? –

+1

Tham khảo mã của [ChangeLog] (http://code.google.com/p/android-change-log/). Tên giải thích việc sử dụng bộ mã đó. Tuy nhiên, sang một bên, bạn có thể thực hiện kiểm tra chạy đầu tiên một mình bằng cách đặt 'DefaultSharedPreference' cho điều đó. ;-). – Niranjan

+0

@GianniCostanzi Để lại 'readagain' thành true. Nếu nó chỉ là 10 prefs, tại sao làm phiền với nhiều mã hơn. Nó không phải là lười biếng, nó chỉ là nó không phải là giá trị nó để tạo ra một pref cho mục đích đó của 10-20 prefs. Nhưng nếu bạn thích thư viện 'ChangeLog' tôi đã chỉ cho bạn, thì hãy thêm một chút mã vào tập tin đó' cl.firstRun() 'là ở đâu đó. :-). Nếu không, chỉ cần để nó là đúng. – Niranjan