2011-03-02 68 views
20

我首次嘗試首選項時不知道PreferenceActivity。所以現在我有一個應用程序,它將所有用戶首選項存儲在特定的首選項文件中PreferenceActivity如何使用自定義首選項文件

我想遷移到使用PreferenceActivity,但我也希望我的用戶保持他們的偏好。

有沒有辦法告訴我的PreferenceActivity使用該特定文件的所有偏好?

+0

你可以編寫一個方法讀取你的舊偏好並將它們保存爲常規偏好 – Maaalte 2011-03-02 15:22:27

+0

我認爲遷移是一種解決方案。但是,我永遠無法擺脫遷移代碼?沒有辦法確保我的應用程序沒有舊版本。 – Yashima 2011-03-02 22:26:52

回答

1

你可以在你的應用程序開始時讀取所有的喜好,然後使用

Editor e = PreferenceManager.getDefaultSharedPreferences(getBaseContext()).edit(); 
e.putBoolean("yourPreference", true); 
e.putString("yourOtherPreference", "This is the Value"); 
... 
e.commit(); 

我希望幫助

+0

我現在實現了這個變體,儘管我最初更喜歡重新命名Andrew的文件。我從來沒有發現如何做後者,所以我堅持明顯。謝謝! – Yashima 2011-03-03 13:29:36

+0

好,我很高興它幫助! – raukodraug 2011-03-03 14:22:44

0

Maaalte是正確的將它們存儲在Preferences,你想要做的是什麼onCreate測試是否存在您的自定義文件,如果存在,請將其重命名爲標準的共享首選項文件名。

另一個選擇是逐個讀取舊的首選項,並在讀取它們時使用共享首選項API添加它們,然後在完成時刪除舊的首選項。

63

它可能爲時已晚發佈此,但你可以在這裏找到一個很好的解決方案

您設置的默認共享偏好文件的名稱預先這樣的:

public class MyPreferencesActivity extends PreferenceActivity { 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     PreferenceManager prefMgr = getPreferenceManager(); 
     prefMgr.setSharedPreferencesName("my_preferences"); 
     prefMgr.setSharedPreferencesMode(MODE_WORLD_READABLE); 

     addPreferencesFromResource(R.xml.preferences); 
    } 
} 

我希望這有助於某人。

問候。

+4

很好的答案(儘管不贊成......)因爲鏈接被破壞而被編輯 - 並從鏈接複製代碼。雖然恕我直言,使用'MODE_WORLD_READABLE'是一個錯誤。 – 2013-07-16 18:43:10

相關問題