2011-10-09 49 views
7

我使用SharedPreferences在我的應用程序內存儲我的數據跨所有Activities。我訪問它是這樣的:如何強制PreferenceActivity處理我的SharedPreferences?

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

我實現了PreferenceActivity,使用戶可以通過它改變數值,但它發生在讀取/寫入數據不是「MyPrefs」,而是:

PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 

這對我來說有點意外。有可能強制PreferenceActivity處理我的「MyPrefs」首選項?在單個應用程序中有幾個偏好有什麼意義?謝謝。

+1

閱讀:http://stackoverflow.com/questions/7045417/android-custom-sharedpreferences-implementation-to-persist-to-database – aromero

回答

0

我可以訪問它像這樣

這很好,只要你不使用PreferenceActivity計劃。

我實現PreferenceActivity,使用戶可以通過它

哎呀更改值。

此外,在那裏擺脫getApplicationContext(),除非你有使用Application而不是活動/服務/任何的具體原因。只有在必要時才使用Application對象,並且您知道爲什麼必須這樣做。

是否可以強制PreferenceActivity處理我的「MyPrefs」首選項?

不容易。除非你有一些特定的理由來發明你自己的SharedPreferences文件,否則我會使用默認的文件。

在單個應用程序中有幾個偏好有什麼意義?

你可能有一個可重複使用的庫或組件要存儲的東西在SharedPreferences,並可能有它自己的文件,以免弄亂從託管應用程序的任何偏好。這就是說,通常不需要多個首選項文件。

+11

'PreferenceActivity'的'getPreferenceManager() .setSharedPreferencesName()'竅門 – xverges

4

我推薦在任何地方使用PreferenceManager.getDefaultSharedPreferences(context),這與首選項活動使用的相同。但是,如果您需要堅持使用當前的設置,那麼一個hacky解決方案(但我唯一知道的解決方案)是重寫getSharedPreferences以返回您想要的。

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

這是可能的和簡單的。這爲我工作

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

也爲我工作......謝謝! – aap

+0

這是正確的答案。如果你使用'PreferenceFragment',這種技術也可以工作。 –

+0

這應該是被接受的答案。 – Jay

相關問題