2014-01-23 153 views
1

使用Android註釋。我的首選項:首選項默認設置和首選項活動

@SharedPref(value = SharedPref.Scope.APPLICATION_DEFAULT) 
public interface MyPreferences { 
    @DefaultBoolean(true) 
    boolean myOption(); 
} 

preferences.xml

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> 
    <CheckBoxPreference 
     android:key="myOption" 
     android:title="My Option Name"/> 
</PreferenceScreen> 

PreferencesActivity

public class MyPreferencesActivity extends PreferenceActivity{ 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.preferences); 
    } 
} 

的問題是:儘管myOption的默認值是真實的(實際上 - 它是當調用MyPreferences_.myOption().get()時)默認情況下,首選項活動中的複選框未被選中。

String首選項也是如此。它們返回@DefaultString註釋中給出的默認字符串,但不會顯示在PreferenceActivity中。只有在更改活動的首選項值後,才能正確顯示。

回答

1

我解決由默認值重複:

values/preferences_defaults.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <bool name="default_myOption">true</bool> 
    <string name="default_myString">my string</string> 
</resources> 

偏好設置:

@SharedPref(value = SharedPref.Scope.APPLICATION_DEFAULT) 
public interface MyPreferences { 
    @DefaultRes(R.bool.default_myOption) 
    boolean myOption(); 

    @DefaultRes(R.string.default_myString) 
    String myString(); 
} 

而且preferences.xml

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> 
    <CheckBoxPreference 
     android:key="myOption" 
     android:defaultValue="@bool/default_myOption" 
     android:title="My Option Name"/> 
    <EditTextPreference 
     android:key="myString" 
     android:defaultValue="@string/default_myString" 
     android:title="My String Option"/> 
</PreferenceScreen> 

現在I C在一個XML文件中爲annotations和PreferenceActivity定義默認值。