2012-12-07 69 views
7

我正在使用CheckBoxPreference進行設置屏幕。 XML是:重設首選項的默認值

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" > 
    <CheckBoxPreference android:key="includeAddress" 
        android:title="Include Address" 
        android:summary="" 
        android:defaultValue="true" /> 
    <CheckBoxPreference android:key="rememberName" 
        android:title="Remeber Name" 
        android:summary="" 
        android:defaultValue="false" /> 
</PreferenceScreen> 

我更改應用程序中的值。用戶註銷後,必須將其設置爲xml中定義的默認值。但是,它似乎並不奏效。他們保留我最後選擇的那些值。

讀過Android的文檔,我發現這一點:

PreferenceManager.setDefaultValues(getApplicationContext(), R.xml.preference_settings, true); 

但它很難做的工作!使用SharedPreferences嘗試其他方式。

SharedPreferences preferences = getParent().getSharedPreferences("preference_settings", MODE_PRIVATE); 
SharedPreferences.Editor editor = preferences.edit(); 
editor.clear(); 
editor.commit(); 

它也沒有工作!

我錯過了什麼嗎?我怎樣才能將首選項設置爲在XML中定義的默認值?

在此先感謝!

回答

6

的共享偏好應該工作,但你應該使用默認的共享偏好..

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); 
SharedPreferences.Editor editor = preferences.edit(); 
editor.clear(); 
editor.commit(); 

要獲得使用文件名的共享偏好,Android的創建這個名稱(可能基於你的項目的包名?)。您可以通過將以下代碼放入SettingsActivity onCreate並查看preferencesName是什麼來獲得它。

String preferencesName = this.getPreferenceManager().getSharedPreferencesName(); 

該字符串應該類似於「com.example.projectname_preferences」。硬編碼在你的項目中的某個地方,並將它傳遞給getSharedPreferences(),你應該很好。

AS:

PreferenceManager.getDefaultSharedPreferences(this); 

將提供給喜好文件,它是全球整個應用程序包的訪問;任何活動都可以訪問首選項(internaly,保存首選項的xml文件將被命名爲your.application.package_preferences.xml)。

getParent().getSharedPreferences("preference_settings", MODE_PRIVATE); 

將只提供了contextInstance類的偏好:只有上下文的類可以訪問這些偏好的情況下,(說你的方案仍然是your.application.package和你在your.application.package.SecondActivity,internaly首選項文件是SecondActivity.xml)。

+0

我分別在res/xml文件夾中定義了一個xml文件,並使用addPreferencesFromResource(R.xml.preference_settings)添加;在Prefs類中。我有另一個課程,註銷,我嘗試設置默認值。 – Renjith

+0

更新了我的回答 – Nermeen

+0

你把它打倒了,布拉沃!謝謝! – Renjith