Giả sử tôi có một ứng dụng lưu tùy chọn vào hai tệp, preferences1.xml và preferences2.xml. Sau đó, tôi có thể truy xuất các tham chiếu đến các đối tượng tương ứng với mã sau:Đặt giá trị mặc định của nhiều phiên bản/tệp được chia sẻPreferences
SharedPreferences sharedPrefs1 = getSharedPreferences("preferences1", MODE_PRIVATE);
SharedPreferences sharedPrefs2 = getSharedPreferences("preferences2", MODE_PRIVATE);
Bằng cách này, tôi có thể thao tác các tùy chọn cho cả hai và đăng ký người nghe để thay đổi trên cả hai.
Tôi có một số nghi ngờ về tính khởi của hai tác phẩm, với setDefaultValues :
Câu hỏi 1 - PreferenceFragment bối cảnh: Tôi đã tạo một PreferenceActivity với hai PreferenceFragments và trong phương thức onCreate của mỗi cái tôi thực thi đoạn mã sau (thay thế X bằng 1 và 2 cho đoạn 1 và 2):
PreferenceManager pm = getPreferenceManager();
pm.setSharedPreferencesName("preferencesX");
PreferenceManager.setDefaultValues(getActivity(),R.xml.preference_fragmentX, false);
Tôi đã nhìn thấy rằng cả hai mảnh đặt đúng sở thích của họ với các giá trị mặc định của họ khi đưa ra .. nhưng, do thực tế mà tôi có thể nhìn thấy duy nhất một _has_set_default_values.xml tập tin trong shared_prefs thư mục của ứng dụng, làm cách nào để hiểu khi nào các thuộc tính của các tùy chọn preferences1.xml và preferences2.xml đã được đặt? Tập tin này được tạo ra càng sớm càng setDefaultValues được gọi trong lần đầu tiên mở PreferenceFragment, nhưng thậm chí sau đó, nếu tôi mở thứ hai PreferenceFragment nó khởi một cách chính xác giá trị mặc định. Làm thế nào để nó hiểu rằng nó vẫn chưa được khởi tạo preferences2.xml và mục đích của _has_set_default_values.xml vì thực tế là nó không chứa thông tin về những tập tin nào đã được khởi tạo?
Câu hỏi 2 - Chuẩn Hoạt động bối cảnh: khi tôi bắt đầu ứng dụng của tôi, các PreferenceActivity không phải là hoạt động đầu tiên bắt đầu và người dùng có thể không bao giờ mở nó, vì vậy tôi muốn khởi tạo hai tập tin sở thích với họ giá trị mặc định cũng có trong hoạt động chính chính, làm cách nào tôi có thể thực hiện điều đó? Đối với các tùy chọn được chia sẻ mặc định, thật dễ dàng:
PreferenceManager.setDefaultValues(this, R.xml.default_preferences, false);
Đối với hai tệp tùy chọn, tôi nên làm như thế nào? Tôi không thể làm điều gì đó như sau kể từ khi tôi không thể lấy một thể hiện của PreferenceManager như trong các lớp PreferenceFragment:
PreferenceManager pm = getPreferenceManager(); // NOT AVAILABLE AND NOT WANTED
pm.setSharedPreferencesName("preferences1");
PreferenceManager.setDefaultValues(getActivity(),R.xml.preference_fragment1, false);
PreferenceManager pm = getPreferenceManager(); // NOT AVAILABLE AND NOT WANTED
pm.setSharedPreferencesName("preferences2");
PreferenceManager.setDefaultValues(getActivity(),R.xml.preference_fragment2, false);
đây trong Hoạt động chính tôi không có nhu cầu thay đổi các tập tin sở thích mà trên đó PreferenceManager sẽ hoạt động, vì chúng tôi không có trong PreferenceActivity, tôi chỉ muốn khởi tạo hai tệp đó ... bất kỳ trợ giúp nào? Tôi hy vọng tôi đã đăng một câu hỏi rõ ràng, ngay cả khi quá dài.
@crazymaik Tôi đã xóa câu trả lời của mình vì tôi không nghĩ trả lời câu hỏi một cách thỏa đáng. Tôi đã dành một số giờ nhìn vào điều này bởi bây giờ, và nó vẫn còn là một bí ẩn hoàn chỉnh ... Hy vọng một người nào đó khác có thể làm sáng tỏ nó. –
uz có thể giải thích thêm về SO Chat? – KOTIOS
thử sử dụng tiền tố .Npacepace trong một tệp vật lý duy nhất để quản lý 2 tập hợp lôgic hoặc các loại tiền tố trong một tệp thủ công. Các mảnh tương ứng của bạn sẽ có thể áp dụng tiền tố NS theo cách không quá gây rối cho các hoạt động CRUD của bạn trên các thuộc tính pref. –