2011-10-09 10 views
7

Tôi đang sử dụng SharedPreferences để lưu trữ dữ liệu của mình trên tất cả Activities trong ứng dụng của tôi. Tôi có được quyền truy cập vào nó như thế này:Làm cách nào để buộc PreferenceActivity xử lý SharedPreferences của tôi?

SharedPreferences mSharedPreferences = getSharedPreferences("MyPrefs", 0); 

Tôi đã thực hiện PreferenceActivity vì vậy người dùng có thể thay đổi các giá trị thông qua nó, nhưng nó xảy ra nó đọc/ghi dữ liệu không "MyPrefs" nhưng để:

PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 

Đó là một chút bất ngờ đối với tôi. Điều đó có thể buộc PreferenceActivity xử lý các tùy chọn "MyPrefs" của tôi không? Và đâu là điểm có nhiều sở thích trong một ứng dụng đơn lẻ? Cảm ơn bạn.

+1

đọc này: http://stackoverflow.com/questions/7045417/android-custom-sharedpreferences-implementation-to-persist-to-database – aromero

Trả lời

0

tôi được tiếp cận với nó như thế này

Đó là tốt, miễn là bạn không được lên kế hoạch về việc sử dụng PreferenceActivity.

Tôi đã thực hiện PreferenceActivity vì vậy người dùng có thể thay đổi các giá trị thông qua nó

Rất tiếc.

Ngoài ra, hãy loại bỏ getApplicationContext() ở đó, trừ khi bạn có lý do cụ thể để sử dụng Application thay vì hoạt động/dịch vụ/bất kỳ điều gì. Chỉ sử dụng đối tượng Application khi bạn có và bạn biết tại sao bạn phải làm vậy.

Điều đó có thể buộc PreferenceActivity xử lý các tùy chọn "MyPrefs" của tôi không?

Không dễ dàng. Trừ khi bạn có một số lý do cụ thể để phát minh tệp SharedPreferences của riêng mình, tôi sẽ sử dụng tệp mặc định.

Và điểm có nhiều tùy chọn trong một ứng dụng là gì?

Bạn có thể có thư viện hoặc thành phần có thể sử dụng lại để lưu trữ nội dung trong SharedPreferences và có thể có tệp riêng của mình để không làm hỏng bất kỳ tùy chọn nào từ ứng dụng lưu trữ. Điều đó đang được nói, nhiều tệp tùy chọn thường không cần thiết.

+11

'PreferenceActivity' của' getPreferenceManager() .setSharedPreferencesName() 'hiện các trick – xverges

4

Tôi khuyên bạn chỉ nên sử dụng PreferenceManager.getDefaultSharedPreferences (ngữ cảnh) ở mọi nơi, giống như hoạt động ưu tiên đang sử dụng. Nhưng nếu bạn cần phải gắn bó với thiết lập hiện tại của bạn sau đó một giải pháp hacky (nhưng chỉ có một tôi biết) là để ghi đè getSharedPreferences để trả lại những gì bạn muốn.

@Override 
public SharedPreferences getSharedPreferences(String name, int mode) { 
    return super.getSharedPreferences("MyPrefs", mode); 
} 
14

Có thể và đơn giản. Điều này làm việc cho tôi

public class SettingsActivity extends PreferenceActivity { 
    @SuppressWarnings("deprecation") 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     getPreferenceManager().setSharedPreferencesName("MyPrefs"); 
     //getPreferenceManager().setSharedPreferencesMode(MODE_WORLD_WRITEABLE); 
    addPreferencesFromResource(R.xml.preferences); 
    } 
} 
+0

Làm việc cho tôi quá ... cảm ơn! – aap

+0

Đây là câu trả lời đúng.Kỹ thuật này cũng hoạt động nếu bạn đang sử dụng 'PreferenceFragment' –

+0

Đây phải là câu trả lời được chấp nhận. – Jay