【问题标题】:Default values from the preferences首选项中的默认值
【发布时间】:2013-06-10 15:42:56
【问题描述】:

根据this,我可以在一开始就从我的 XML 首选项文件中加载默认值。但是当我检查我看到的设置的键时,我的 R.xml.preferences 根本没有被读取。也许这将在用户第一次启动 PreferenceScreen 时完成。是否有解决方案。 当用户第一次启动应用程序时如何检索值?因为链接没有帮助。

什么时候启动它有什么不同吗?但是 Context 和 Application 都没有带来改变。还是我需要从目录中删除某些内容,因为 R.xml.preferences 未安装在从中检索内容的 SharedPreferences-Dir 中?

【问题讨论】:

    标签: android sharedpreferences android-preferences


    【解决方案1】:

    在你的主要活动的 onCreate 方法中使用它

    // Make sure default values are applied.  In a real app, you would
            // want this in a shared function that is used to retrieve the
            // SharedPreferences wherever they are needed.
           PreferenceManager.setDefaultValues(this, R.xml.advanced_preferences, false);
    
            // Load the preferences from an XML resource
            addPreferencesFromResource(R.xml.fragmented_preferences);
    

    【讨论】:

    • 第一个 - 请参阅其他评论。对于第二种方法,我在Activty 中找不到它们,但在PreferenceActivity 中找不到它们,这意味着要提前使用 PreferenceScreen。但我想在用户交互之前提前加载preference-xml-file的首选项。
    【解决方案2】:

    为此使用应用程序类:

    public class App extends Application{
    
        @Override
        public void onCreate() {
            super.onCreate();
    
            PreferenceManager.setDefaultValues(this, R.xml.prefs, false);
        }
    
    }
    

    并将其添加到清单中:

     <application
                android:name=".App"
    

    【讨论】:

    • 但这只会加载已经使用过的 SharedPrefs。放。我的意思是它们不是从 build-xml 文件中检索的,而是从 xml 中检索的,这显然是在编辑后保存的。如果我通过 SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context); 检索设置,那么我不会从 prefs 文件中获得任何默认值。
    • @LeO 你必须告诉 android 从哪里获得偏好。 getDefaultSharedPreferences() 将加载空文件,如果您不事先加载它。此外,项目中的build.xml 文件是针对 Ant 的,而不是针对应用偏好的。
    • 抱歉,您的回复让我不知所措。这是有道理的,但实际上我不知道如何检索它们。 IFFF 我的(默认)首选项存储在 R.xml.prefs 如何从那里检索它们? setDefaultValues()-方法可能很方便,但我不知道,现在如何检索/访问这些值?